首页
点滴
Docker搭建Mysql主从复制
#### 官方镜像仓库,可搜索想要的镜像 [https://hub.docker.com/](https://hub.docker.com/) #### 从仓库拉取对应版本镜像 (方法一)拉取最新版本的镜像 ``` docker pull mysql ``` (方法二)拉取对应版本的镜像,后面加上冒号版本号,如:5.7 ``` docker pull mysql:5.7 ``` #### 查看已有的镜像 ``` docker images ``` #### 如下返回结果可以看出已经把mysql5.7镜像拉取下来 ``` REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 c20987f18b13 10 months ago 448MB ``` #### ==== 主库操作 === #### 1、在宿主机中新建主库的conf、data、log文件夹用来作为映射容器的数据卷 ``` mkdir -p /docker/mysql-master/conf mkdir -p /docker/mysql-master/data mkdir -p /docker/mysql-master/log ``` #### 2、在conf目录下新建my.cnf文件,并配置如下内容 ``` ## 1、编写配置文件内容 [mysqld] ## 设置server_id,同一局域网中需要唯一 server_id = 100 ## 指定不需要同步的数据库名称 binlog_ignore_db = mysql ## 开启二进制日志功能 log_bin = mall_mysql_bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size = 1M ## 设置使用的二进制日志格式mixed、statement、row binlog_format = mixed ## 二进制日志过期清理时间,默认值为0,表示不自动清理 expire_logs_days = 7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors = 1062 character_set_server = utf8mb4 collation_server = utf8mb4_general_ci init_connect = 'SET NAMES utf8mb4' default_authentication_plugin = mysql_native_password sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION default-time-zone = +08:00 max_connections = 300 [client] default_character_set = utf8 ``` #### 3、运行MySQL容器,宿主机端口为3307,映射Mysql容器端口3306 ``` docker run -p 3307:3306 --privileged=true -v /docker/mysql-master/log:/var/log/mysql -v /docker/mysql-master/data:/var/lib/mysql -v /docker/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=mysql666 --name mysql-master -d mysql:5.7 ``` #### 4、查看当前正在运行的容器 ``` docker ps ``` #### 5、进入运行中的mysql容器 ``` docker exec -it 容器ID /bin/bash ``` #### 6、登录主库Mysql ``` mysql -uroot -p ``` #### 7、在Mysql实列中创建并授权主从复制专用账号 ``` CREATE USER 'slave_sync'@'%' IDENTIFIED BY 'mysql666'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave_sync'@'%'; ``` #### 8、在Mysql实列中刷新权限 ``` FLUSH PRIVILEGES; ``` #### 9、在Mysql实列中执行 show master status; 记住 File、Position 两个字段的值,从库中配置连接主库信息时需要用到 ``` show master status; ``` #### === 从库操作 === #### 1、在宿主机中新建从库的conf、data、log文件夹用来作为映射容器的数据卷 ``` mkdir -p /docker/mysql-slave/conf mkdir -p /docker/mysql-slave/data mkdir -p /docker/mysql-slave/log ``` #### 2、在conf目录下新建my.cnf文件,并配置如下内容 ``` ## 1、编写配置文件内容 [mysqld] ## 设置server_id,同一局域网中需要唯一 server_id = 200 ## 指定不需要同步的数据库名称 binlog_ignore_db = mysql ## 开启二进制日志功能 log_bin = mall_mysql_bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size = 1M ## 设置使用的二进制日志格式mixed、statement、row binlog_format = mixed ## 二进制日志过期清理时间,默认值为0,表示不自动清理 expire_logs_days = 7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors = 1062 ## relay_log配置中继日志 relay_log = mall_mysql_relay_bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates = 1 ## slave设置为只读(具有super权限的用户除外) read_only = 1 character_set_server = utf8mb4 collation_server = utf8mb4_general_ci init_connect = 'SET NAMES utf8mb4' default_authentication_plugin = mysql_native_password sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION default-time-zone = +08:00 max_connections = 300 [client] default_character_set = utf8 ``` #### 3、运行MySQL容器,宿主机端口为3308,映射Mysql容器端口3306 ``` docker run -p 3308:3306 --privileged=true -v /docker/mysql-slave/log:/var/log/mysql -v /docker/mysql-slave/data:/var/lib/mysql -v /docker/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=mysql666 --name mysql-slave -d mysql:5.7 ``` #### 4、查看当前正在运行的容器 ``` docker ps ``` #### 5、进入运行中的mysql容器 ``` docker exec -it 容器ID /bin/bash ``` #### 6、登录主库Mysql ``` mysql -uroot -p ``` #### 7、在Mysql实列中配置连接主库的信息 ``` change master to master_host = '宿主机IP', master_user = '主库分配的专用账号', master_password = '密码', master_port = 主库端口, master_log_file = '主库的File', master_log_pos = 主库的Position, master_connect_retry = 30; ``` #### 8、查看从库的状态,主要看Slave_IO_Running、Slave_SQL_Running 的值,NO为未开始,YES为已开始 ``` show slave status \G; ``` #### 9、执行命令开启主从同步,执行完再执行上面的第8步看状态是否变为YES ``` start slave; ``` > 到这里Docker搭建Mysql主从复制就完成了,可以用Navicat分别连接主从Mysql,在主MySQL中新建库表插入数据,看看从库中是否对应自动创建
博客分类
源码解析 (1)
多线程 (5)
Java (10)
Linux (8)
Docker (9)
SpringBoot (14)
微服务 (1)
Redis (15)
MySQL (7)
VMware (3)
Nginx (15)
MyBatis (2)
RabbitMQ (1)
Git (7)
工具类 (12)
前端 (3)
友情链接
layui
© 2020-2025 www.chenhuazhan.com All Rights Reserved 备案号:
桂ICP备17004487号-1
粤公网安备44030002005146