tx

wangcx

栖迟於一丘,则天下不易其乐
20,798
Docker 实现 MySQL 读写分离(主从同步) Docker 实现 MySQL 读写分离(主从同步)

pull镜像(MySQL 5.7)

docker pull mysql:5.7.26

创建目录

mkdir -p /usr/local/mysqlData/master/cnf
mkdir -p /usr/local/mysqlData/master/data

mkdir -p /usr/local/mysqlData/slave/cnf 
mkdir -p /usr/local/mysqlData/slave/data 

编写配置master节点配置

vim /usr/local/mysqlData/master/cnf/mysql.cnf

内容如下

[mysqld]
## 设置server_id,注意要唯一
server-id=1
## 开启binlog
log-bin=mysql-bin
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed

编写配置slave节点配置

vim /usr/local/mysqlData/slave/cnf/mysql.cnf

内容如下

[mysqld]
## 设置server_id,注意要唯一
server-id=2
## 开启binlog,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

启动主服务器 3306端口

docker run -itd -p 3306:3306 --name master -v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.26

添加复制master数据的用户reader,供从服务器使用

docker exec -it master /bin/bash
mysql -u root -p123456
GRANT REPLICATION SLAVE ON *.* to 'reader'@'%' identified by 'reader';
FLUSH PRIVILEGES;

创建并运行从服务器 3307端口

docker run -itd -p 3307:3306 --name slaver -v /usr/local/mysqlData/slave/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.26

在从服务器上配置连接主服务器的信息

  • 首先主服务器上查看master_log_file、master_log_pos两个参数,然后切换到从服务器上进行主服务器的连接信息的设置。
docker exec -it master /bin/bash
mysql -u root -p123456
show master status;
  • 查看主服务器容器的ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' master

从服务器上执行

docker exec -it slaver /bin/bash
mysql -u root -p123456
change master to master_host='172.17.0.2',master_user='reader',master_password='reader',master_log_file='mysql-bin.000003',master_log_pos=591;
#ip地址,master_log_file,master_log_pos 替换为上一步主服务器上查询到的

从服务器启动I/O 线程和SQL线程

start slave;
# Slave_IO_Running: Yes,Slave_SQL_Running: Yes 即表示启动成功。

设置Docker容器自动启动

docker update --restart=always slaver
docker update --restart=always master
29 条评论
user 编辑评论信息
插入图片

隐私评论
  1. @
    jxAunaIDP 2月18日
    Windows 10 · Chrome 120 · 阿尔巴尼亚
    此条为悄悄话,仅发布者可见
  2. @
    jxAunaIDP 2月18日
    Windows 10 · Chrome 120 · 阿尔巴尼亚
    此条为悄悄话,仅发布者可见
  3. @
    jxAunaIDP 2月18日
    Windows 10 · Chrome 120 · 阿尔巴尼亚
    此条为悄悄话,仅发布者可见
  4. @
    jxAunaIDP 2月18日
    Windows 10 · Chrome 120 · 阿尔巴尼亚
    此条为悄悄话,仅发布者可见
  5. @
    ZuBcNzMd 2月10日
    Windows 10 · Chrome 120 · 亚太地区
    此条为悄悄话,仅发布者可见
  6. @
    ZuBcNzMd 2月10日
    Windows 10 · Chrome 120 · 亚太地区
    此条为悄悄话,仅发布者可见
  7. @
    ZuBcNzMd 2月10日
    Windows 10 · Chrome 120 · 亚太地区
    此条为悄悄话,仅发布者可见
  8. @
    ZuBcNzMd 2月10日
    Windows 10 · Chrome 120 · 亚太地区
    此条为悄悄话,仅发布者可见
  9. @
    cc7sez 1月12日
    iPhone · Safari · 加拿大 魁北克省博阿努瓦OVH数据中心
    此条为悄悄话,仅发布者可见