随笔(二十三)『docker MySql 主从复制』

1、准备好带docker的虚拟机

2、拉取mysql5.7镜像

docker pull mysql:5.7

3、创建主服务的映射

mkdir -p /mydata/mysql_master/log
mkdir -p /mydata/mysql_master/data
mkdir -p /mydata/mysql_master/conf
touch /mydata/mysql_master/conf/my.cnf

4、创建从服务的映射

mkdir -p /mydata/mysql_slave/log
mkdir -p /mydata/mysql_slave/data
mkdir -p /mydata/mysql_slave/conf
touch /mydata/mysql_slave/conf/my.cnf

5、设置主服务mysql_master配置

cd /mydata/mysql_master/conf
vim my.cnf
[client]
# 设置默认的字符集为UTF-8
default_character_set=utf8

[mysql]
# 设置默认的字符集为UTF-8
default-character-set=utf8

[mysqld]
# 设置MySQL服务器的排序规则为UTF-8
collation_server = utf8_general_ci
# 设置MySQL服务器使用的字符集为UTF-8
character_set_server = utf8

# 设置server_id,同一局域网中需要唯一
server_id=10010
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=mysql_master-bin
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
# 二进制日志过期清理时间。默认为0,表示不自动清理
expire_logs_days=3
# 跳过主从复制中遇到的错误,避免slave端复制中断 1062:一些主键重复
slave_skip_errors=1062


6、设置从服务mysql_slave配置

cd /mydata/mysql_slave/conf
vim my.cnf
[client]
# 设置默认的字符集为UTF-8
default_character_set=utf8

[mysql]
# 设置默认的字符集为UTF-8
default-character-set=utf8

[mysqld]
# 设置MySQL服务器的排序规则为UTF-8
collation_server = utf8_general_ci
# 设置MySQL服务器使用的字符集为UTF-8
character_set_server = utf8

# 设置server_id,同一局域网中需要唯一
server_id=10086
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=mysql_slave-bin
# 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
# 二进制日志过期清理时间。默认为0,表示不自动清理
expire_logs_days=3
# 配置中继日志
relay_log=mysql-relay-bin
# slave将复制事件写进自己的二进制日志
log_slave_updates=1
# 设置只读(具有super权限的用户除外)
read_only=1

7、创建主服务mysql_master实例并启动

docker run -p 10010:3306 --name mysql_master \
-v /mydata/mysql_master/log:/var/log/mysql \
-v /mydata/mysql_master/data:/var/lib/mysql \
-v /mydata/mysql_master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

8、进入主服务容器,登录msql

docker exec -it mysql_master /bin/bash

mysql -u root -p

密码:root

9、创建从服务mysql_slave用户并设置密码

CREATE USER 'mysql_slave'@'%' IDENTIFIED BY '123456';

10、给从服务mysql_slave赋权及刷新权限

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'mysql_slave'@'%';

FLUSH PRIVILEGES;

11、查看主服务mysql_master状态

show master status;

image

12、创建主服务mysql_slave实例并启动

docker run -p 10086:3306 --name mysql_slave \
-v /mydata/mysql_slave/log:/var/log/mysql \
-v /mydata/mysql_slave/data:/var/lib/mysql \
-v /mydata/mysql_slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

13、进入从服务容器,登录msql

docker exec -it mysql_slave /bin/bash

mysql -u root -p

密码:root

14、在从服务mysql_slave配置主服务mysql_master信息

change master to master_host='主服务宿主机IP',master_port=10010,master_user='mysql_slave',master_password='123456',master_log_file='mysql_master-bin.000003',master_log_pos=781,master_connect_retry=30;

15、从服务mysql_slave查看主从状态

show slave status \G;

image

16、从服务mysql_slave开启主从同步

start slave;

17、再次从服务mysql_slave查看主从状态

show slave status \G;

image

posted @   小昕昕  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示