MySql Docker 镜像主从配置
1.1 拉取mysql镜像
$docker pull hub.c.163.com/library/mysql:latest
1.2 启动Mysql Docker镜像
启动的时候要配置容器一些参数,要把MySQL数据文件挂载到宿主机上,防止容器因某种原因无法启动,数据丢失,设置MySQL的初始密码这里是必须的不然启动会报错,把MySQL端口映射到宿主机的某一个端口上,给特权,这里是防止MySQL写数据到宿主机的时候出现权限问题,给容器设置一个名字,便于识别
$docker run
–d
–it
–p 3306:3306
--privileged=true
–name=myql5.7
–v /opt/mysql: /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 <容器ID>
1.3 进入容器内部,给设置mysql用户对文件夹访问的权限
$docker exec –it <容器id> /bin/bash
$chown –R mysql:mysql /var/lib/mysql
1.4 配置主库
## 先进入容器内部把/etc/msyql/my.cnf文件拷贝到宿主机
$docker exec –it <容器id> /bin/bash
$docker cp <容器id>:/etc/msyql/my.cnf /tmp/
##在文件my.cnf末尾添加以下配置
[mysqld]
##打开二进制文件
log-bin=mysql-bin
## 异步写入文件
sync_binlog=1
##最好使用IP后缀
server_id=2923
##中继日志存放地方
relay_log=/var/lib/mysql/mysql-relay-bin
## 再把文件拷贝到容器的/etc/msyql/位置
$docker cp /tmp/my.cnf <容器id>:/etc/msyql/my.cnf
这里有个疑问,为什么要拷贝文件到宿主机修改?因为在没联网或者Yum源码没有Vi或者Vim编辑器,如果有可以直接修改即可
1.4.1 创建主库用户给备库连接使用
## 进入容器内部
$docker exec –it <容器id> /bin/bash
## 连接MySQL
$mysql –uroot –p123456
>grant replication slave,replication client on *.* to '新主库用户名' @ '允许访问的IP' identified by '设置用户密码'
1.5 配置备库
1.5.1 配置my.cnf
和主库配置类似,这里不累述,先从容器中把文件(/etc/mysql/my.cnf) 复制到宿主机添加如下配置,再覆盖以前的文件
[mysqld]
##打开二进制文件
log-bin=mysql-bin
##最好使用IP后缀便于识别
servide-id=2924
##中继日志存放位置
relay_log=/var/lib/mysql/mysql-relay-bin
##便于备库崩溃的时候方便查询错误位置
log_slave_updates=1
##这里开启备库自动重启会出现连接不上主库,原因未知
##skip_slave_start(不用配 置,配置后)
##异步写入master_info,防止崩溃不刷新到磁盘
sync_master_info=1
##异步写入中继日志
sync_relay_log=1
sync_relay_log_info=1
1.5.2 设置账号及主库信息
## 进入备库的mysql命令界面
$mysql –uroot –p123456
>change master to master_host='主库IP'
master_user='主库设置的用户' ,
master_password='主库用户密码' ,
master_log_file='<主库查询数据库show master status ,字段File的值>' ,
master_log_pos=<主库查询数据库show master status ,字段Position的值> ;
1.6 测试
1.6.1 测试方案一
在主库里面创建插入数据,看是否已同步到备库,看是否数据一致
1.6.2 测试方案二
查询备库数据信息
$mysql -uroot –p123456
>show slave status\G;
如果出现上面的状态表示主从配置成功