利用docker安装MySQL
一、docker安装(详见:https://blog.csdn.net/baidu_38432732/article/details/81081819)二、mysql安装1、MySQL服务器信息[root@mysql ~]# docker search mysql2、下载MySQL镜像并部署[root@mysql ~]# docker pull docker.io/mysq...
一、docker安装(详见:https://blog.csdn.net/baidu_38432732/article/details/81081819)
二、mysql安装
1、MySQL服务器信息
[root@mysql ~]# docker search mysql

2、下载MySQL镜像并部署
[root@mysql ~]# docker pull docker.io/mysql:5.7
[root@mysql ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql 5.7 c356247174ed 44 seconds ago 372 MB
检测对应的容器是否启动
![]()
3、启动MySQL
[root@mysql ~]# docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d docker.io/mysql:5.7
或挂载数据路径和配置文件路径 -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf -v /data/mysql/data:/var/lib/mysql

#检查对应容器是否启动
[root@mysql ~]# docker ps

#数据库登陆方式:

开启防火墙,对外开放
[root@mysql ~]# systemctl status firewalld
[root@mysql ~]# firewall-cmd --zone=public --add-port=8080/tcp -permanent
[root@mysql ~]# firewall-cmd --reload
授权登陆用户

客户机登陆:


至此数据库安装完成,其余的版本数据库安装大致流程是一致
三、docker搭建mysql主从
1 依照上面的流程,我们再启动两个mysql容器的实例,两个实例对外的端口和容器名称不同
主节点:
docker run -p 3339:3306 --name mymysql-master -v /data/deploy/mysql/master/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.25
从节点:
docker run -p 3340:3306 --name mymysql-slave -v /data/deploy/mysql/master/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.25
启动成功可通过docker ps观察是否启动成功:
2 进入主节点容器,配置my.cnf文件,我们知道,mysql主从的原理是从节点通过监听主节点的bin_log文件完成数据的同步的,默认情况下,不管是服务器直接安装还是docker安装的mysql,均没有开始bin_log,需要手动开启,首先修改主节点的my.cnf
但是在docker的容器中,初次进去直接执行vi 或者vim命令时会提示命令找不到,需要手动安装一下vim的命令,如下:
apt-get update
apt-get install vim
安装成功后,主节点配置如下:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
server-id=100
log-bin=mysql-bin
从节点的配置如下
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
server-id=101
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start mymysql-master启动容器
service mysql restart
docker start mymysql-master
下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
File和Position字段的值后面将会用到,Position表示从节点要监听的bin_log位置起始点,在后面的操作完成之前,需确保Master库不做任何操作,否则将会引起状态变化,File和Position字段的值变化会对后面的数据同步时不准确
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 609 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
3 从节点也做同样的操作,即进入容器后配置my.cnf并重启容器
进入从节点的mysql命令模式客户端,执行如下命令,完成配置连接信息初始化,
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 609, master_connect_retry=30;
简单解释下上面命令的含义:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
关于docker启动后的IP地址,可能有些同学不太熟悉,可以通过上面所说的:docker inspect 镜像ID查看:

3 再在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态

图中圈起来的是需要关注的地方,比如这里的position就是上面主节点的起始位置监听点,同时因为我们还没有开启主从复制过程,所以SlaveIORunning 和 SlaveSQLRunning 都是No,再次执行命令
start slave
然后再观察主从同步状态,这时候状态就变了

测试主从数据是否可以同步
正常情况下,开启了同步命令后,从节点就开启了对主节点的bin_log日志的监听,只要不出现连接短路的问题就一直处于connecting的状态
测试的话也非常简单,只需要在主节点创建一个库,然后看看从节点是否也有这个表就可以了啊,在主节点创建一个名test的数据库
然后再在从节点的mysql命令行工具查看一下,

基本上到这里,我们通过docker完成了一个mysql主从搭建的简易案例,希望对看到的同学有用,最后感谢观看!
更多推荐
所有评论(0)