docker安装mysql8的主从同步配置学习小记

1、下载mysql8的镜像文件

docker pull mysql:8.0.33

创建数据库容器挂载目录:

#主库挂载目录创建
mkdir -p /mydata/mysql8-m1

cd /mydata/mysql8-m1

mkdir log data conf

#从库挂载目录创建
mkdir -p /mydata/mysql8-s1

cd /mydata/mysql8-s1

mkdir log data conf

2、主库配置文件

vim /mydata/mysql8-m1/conf/my.cnf

3、将下面内容拷贝到文件中

# master

[mysqld]
# [必须]服务器唯一ID
server-id=888

# [必须]启用二进制日志
log-bin=mysql-bin

# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql

# 确保binlog日志写入后与硬盘同步
sync_binlog = 1

# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all

# default
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

保存退出

4、创建主库容器

docker run -p 3308:3306 --restart=always --name mysql8-m1 -v /mydata/mysql8-m1/log:/var/log/mysql -v /mydata/mysql8-m1/data:/var/lib/mysql -v /mydata/mysql8-m1/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.33

5、从库配置文件


cat >> mysql/conf/my.cnf <<EOF
# slave

[mysqld]
# [必须]服务器唯一ID
server-id=999

# [必须]启用二进制日志
log-bin=mysql-bin 

# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql

# 确保binlog日志写入后与硬盘同步
sync_binlog = 1

# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all     

# relay_log配置中继日志
relay_log=mysql-relay-bin  

# log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  

# default 
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

EOF

6、创建从库容器

docker run -p 3309:3306 --restart=always --name mysql8-s1 -v /mydata/mysql8-s1/log:/var/log/mysql -v /mydata/mysql8-s1/data:/var/lib/mysql -v /mydata/mysql8-s1/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.33

7、在主库容器中配置主从同步账号

#进入主库容器
docker exec -it mysql8-m1 /bin/bash

#连接数据库
mysql -uroot -p123456


# 查看配置的服务ID,显示配置的ID一致
mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 888   |
| server_id_bits | 32    |
+----------------+-------+

# 看master信息 File 和 Position 从库配置时需要用
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      157 |              | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+

# 创建同步账户并开启权限,mysql8中的密码需要指定加密方式
mysql> create user 'slave'@'%' identified with sha256_password by '123456';
mysql> grant replication slave,replication client on *.* to 'slave'@'%';

# 刷新生效
mysql> flush privileges;

提示:如果之前创建账户没有加密,可以将用户名删除重新创建

mysql> delete from user where User='slave';

mysql> commit;

8、在从库容器中配置链接master节点

#进入主库容器
docker exec -it mysql8-s1 /bin/bash

#连接数据库
mysql -uroot -p123456

# 查看配置的服务ID,显示配置的ID一致
mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 999   |
| server_id_bits | 32    |
+----------------+-------+

# 连接主mysql服务 master_log_file 和 master_log_pos的值要填写主master里查出来的值 注意这里master_host使用的容器ip
mysql> change master to master_host='172.17.0.6',master_user='slave',master_password='123456',master_port=3306,master_log_file='mysql-bin.000003', master_log_pos=157,master_connect_retry=30;

######################################################
###  连接主mysql参数说明:
###  master_port:Master的端口号,指的是容器的端口号
###  master_user:用于数据同步的用户
###  master_password:用于同步的用户的密码
###  master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
###  master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
###  master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
######################################################

# 开启slave
mysql> start slave;
# 查看slave启动状态
mysql> show slave status \G   

9、重启主从库容器

docker restart mysql8-m1 mysql8-s1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值