docker部署mysql5.7主从
一、创建网络
docker network create -d bridge my_network
二、拉取mysql镜像
docker pull mysql:5.7
三、创建容器
主库:
docker run -p 13306:3306 --name master_mysql --net my_network -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
从库:
docker run -p 13307:3306 --name slave_mysql --net my_network -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
完成之后,需要更改my.cnf配置,通过docker cp命令拷贝文件进行修改
主库
[mysqld] ## 同一局域网内注意要唯一 server-id=100 ## 开启二进制日志功能,可以随便取(关键) log-bin=mysql-bin
##支持监听表结构变化
binlog-format=ROW
从库
[mysqld] ## 设置server_id,注意要唯一 server-id=101 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin ## relay_log配置中继日志 relay_log=edu-mysql-relay-bin
配置完成之后重启mysql
docker restart master_mysql
docker restart slave_mysql
4. 配置主库
在master数据库(主库)中创建同步用户授予用户slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
创建用户并授权,允许从库服务连接主库的服务
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
注意:如果是mysql8以上版本,还需要修改加密模式
alter user 'slave'@'%' identified with mysql_native_password by '123456';
刷新一下
flush privileges;
查询主库File和Position
show master status;
进入从库Slave 中进入 mysql,执行
change master to master_host='master_mysql', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 784, master_connect_retry=30;
然后刷新一下
flush privileges;
启动主从
start slave;
查看从库的状态,有两个Yes的话说明主从配置成功,可以在主库上新建数据库进行测试
show slave status \G