为什么选 Docker
搭建主从复制需要两个以上的MySQL, 使用 Docker 非常方便。如果以前没用过,找个简单的文档看看,熟悉一下命令。
搭建过程
1.下载镜像
docker pull mysql:5.7.
2.创建服务器
docker run --name mysql_master -p : -e MYSQL_ROOT_PASSWORD= -d mysql:5.7. //通过镜像 mysql:5.7.21 启动一个名为 mysql_master 的 MySQL 服务器,端口号是3306,映射的宿主机端口号是3310,root 账号密码是123456
3.创建Slave服务器
docker run --name mysql_slave -p : -e MYSQL_ROOT_PASSWORD= -d mysql:5.7.
通过 docker container ls -a 可以看到创建成功
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2298154e6d4 mysql:5.7. "docker-entrypoint.s…" hours ago Up hours 0.0.0.0:->/tcp mysql_slave
b8d7e74b2d31 mysql:5.7. "docker-entrypoint.s…" hours ago Up About an hour 0.0.0.0:->/tcp mysql_master
4.查看IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' b8d
//172.17.0.2
docker inspect --format='{{.NetworkSettings.IPAddress}}' d22
//172.17.0.3
master IP : 172.17.0.2
slave IP : 172.17.0.3
MySQL 配置
1. Master 配置
//进入Master服务器
docker exec -it b8d /bin/bash
//进的入配置
cd /etc/mysql
//修改配置文件--my.cnf增加下面两行
server_id=
log-bin=mysql-bin
//配置完成后重启
service mysql restart
//如果容器停止了,要从新启动进入,docker container start b8d
//再次进入容器
mysql -uroot -p
//执行下面命令进行复制授权
CREATE USER 'slave'@'%' IDENTIFIED BY '';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
//检查命令
show master status; +------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin. | 370 | | | |
+------------------+----------+--------------+------------------+-------------------+
row in set (0.00 sec) //File Position 两个数据后面配置 Slave 会用到。
2. Slave 配置
//进入Slave 容器
docker exec -it d22 /bin/bash
//配置mysql,增加下面
server_id=
log-bin=mysql-bin
//重启进入执行
change master to master_host='172.17.0.2', master_user='slave', master_password='', master_port=, master_log_file='mysql-bin.000002', master_log_pos=, master_connect_retry=;
//启动
start slave;
//查看主从同步状态
show slave status \G; *************************** . row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.17.0.2
Master_User: slave
Master_Port:
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos:
Relay_Log_File: d2298154e6d4-relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno:
Last_Error:
Skip_Counter:
Exec_Master_Log_Pos:
Relay_Log_Space:
Until_Condition: None
Until_Log_File:
Until_Log_Pos:
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master:
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno:
Last_IO_Error:
Last_SQL_Errno:
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id:
Master_UUID: 2cf67843--11e8-bfa5-0242ac110002
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay:
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count:
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position:
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
row in set (0.00 sec)
Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 表明配置成功。 配置 master_log_file='mysql-bin.000002', master_log_pos=370, 这两个参数要注意 和 show
master status 输出的值保持一致,不然会出现同步错误。