搭建步骤1、拉取镜像Docker pull MySQL:latest2、查看镜像docker images————————————————————————————mysqllatestc8562eaf9d815 months ago546MB3、创建启动容器Master
docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSword=123456 -d mysql:latestSlave
docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latestMySQL 主数据库端口为 3306,容器名称为 mysql-master,默认密码为 123456,-d 为后台运行 。
MySQL 从数据库端口为 3307,容器名称为 mysql-slave,默认密码为 123456,-d 为后台运行 。
4、配置Master进入容器:
docker exec -it mysql-master /bin/bash修改配置文件:
cd /etc/mysqlvim my.cnf————————————————————————————bash: vim: command not found找不到vim命令解决:
# 更新包apt-get update# 安装vimapt-get install vim -y【MySQL | 利用 Docker 快速搭建主从复制】修改配置文件,添加如下配置:
# 同一局域网内注意要唯一server-id=1 # 开启二进制日志功能,二进制文件名称log-bin=master-bin# 二进制日志格式,有row、statement、mixed三种格式,row指的是把改变的内容复制过去,而不是把命令在从服务器上执行一遍,statement指的是在主服务器上执行的SQL语句,在从服务器上执行同样的语句 。MySQL默认采用基于语句的复制,效率比较高 。mixed指的是默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制 。binlog-format=ROW# 同步的数据库名称,如果不配置,表示同步所有的库binlog-do-db=数据库名重启容器:
docker restart mysql-master5、配置Slave进入容器:
docker exec -it mysql-slave /bin/bash修改配置文件如下:
# 同一局域网内注意要唯一server-id=2# 开启二进制日志功能,二进制文件名称log-bin=slave-bin# 二进制文件的格式binlog-format=ROW 重启容器:
docker restart mysql-slave6、开启 Master-Slave 主从复制进入 master 容器或者通过 MySQL 客户端工具,执行 show master status 查看 master 状态,记录相关信息 。
mysql->show master status;————————————————————————————-------------------+----------+--------------+------------------+-------------------+| File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+-------------------+----------+--------------+------------------+-------------------+| master-bin.000007 |156 ||||查看 master 容器的独立IP:
docker inspect --format='{{.NETworkSettings.IPAddress}}' mysql-master————————————————————————————172.17.0.4进入slave容器或者通过MySQL客户端工具,执行如下命令:
change master to master_host='172.17.0.4', master_user='root', master_password='123456', master_port=3306, master_log_file='master-bin.000007', master_log_pos=156, master_connect_retry=60;
- master_host:master的容器独立IP
- master_port:master的容器端口号
- master_user:用于同步数据的用户
- master_password:用于同步数据的用户密码
- master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
- master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
- master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
start slave查看 slave 状态:show slave status G;————————————————————————————*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 172.17.0.4Master_User: rootMaster_Port: 3306Connect_Retry: 30Master_Log_File: master-bin.000007Read_Master_Log_Pos: 4187Relay_Log_File: a40ee670e244-relay-bin.000002Relay_Log_Pos: 4356Relay_Master_Log_File: master-bin.000007Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 4187Relay_Log_Space: 4572Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 1Master_UUID: 77e35acb-bfb0-11eb-9513-0242ac110002Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:Master_public_key_path:Get_master_public_key: 0Network_Namespace:
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 如何利用海外版抖音TikTok进行营销
- |职场中,一些人会利用自己的弱点来对抗内心,最终得到了风生水起
- 求职|在面试时,如何避免被利用?
- 文山|在平时的生活中,我们可以利用参加社交活动的机会,来增加拓展自己的交际圈
- 利用碳-14测定古代生物体距今的时间的原理
- 如何利用瘦身瑜伽减肥
- 国企|如何利用好领导的职权?
- JDBC连接池封装MaxCompute/Hive/Oracle/Mysql
- Lock wait timeout exceeded MySQL更新锁表超时
- |乳液和乳霜:利用补油护理打造完美妆底
