Docker学习之路【八】安装主从复制MYSQL8

拉取MySQL镜像

#拉取MySQL镜像
docker pull mysql:8.0.37

创建存储目录

#创建数据存储目录
mkdir -p /docker/mysql/master/data
#创建日志目录
mkdir -p /docker/mysql/master/logs
#创建配置文件目录
mkdir -p /docker/mysql/master/conf

运行容器

docker run -p 3340:3306 --name mysql_master --privileged=true \
-v /docker/mysql/master/conf:/etc/mysql/conf.d \
-v /docker/mysql/master/logs:/var/log/mysql \
-v /docker/mysql/master/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.37 --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake 

进入容器

docker exec -it mysql_master /bin/bash
mysql -uroot -p
#输入密码123456
#创建用于同步的数据库
create database db01;

配置远程连接(对外连接的)

# 在MySQL下执行
use mysql;
# 创建对外访问的用户和权限
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'slave'@'%' WITH GRANT OPTION;
#修改认证方式
alter user 'slave'@'%' identified with mysql_native_password by '123456';
FLUSH PRIVILEGES;
# 退出
exit;

创建自定义的配置文件

cd /docker/mysql/master/conf
touch my.cnf
vim my.cnf

my.cnf文件内容

[client]
# mysql客户端默认字符集
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 跳过密码登录
#skip-grant-tables
#bind-address = 127.0.0.1
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
# mysql服务端默认字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
# datadir=/var/lib/mysql  

# 主服务器唯一ID
server-id=1
# 设置不要复制的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(先创建好)
binlog-do-db=db01
# 启用二进制日志,日志的存放地址
log-bin=/var/lib/mysql/mysql-bin
# 主机,1 只读 0 读写(默认是0)
read-only=0
# 设置logbin格式 有3种格式 
# 默认 STATEMENT(函数支持不好) 默认的 ROW(行模式大量修改效率不行,但支持存储引擎) MIXED (综合,推荐)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 二进制日志过期清理时间,默认是0(不自动清理)
expire_logs_days=7
# 单个二进制日志大小
max_binlog_size=200M
# 设置每隔多少次事务提交操作,将这些操作写入二进制日志文件
sync_binlog=1
# 使用mysql_native_password插件的认证
# default_authentication_plugin=mysql_native_password

重启容器

docker restart mysql_master
# 需要记录一下File、Position
show master status;
#查询结果
mysql> show master status;
+------------------+----------+--------------+---------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            | Executed_Gtid_Set |
+------------------+----------+--------------+---------------------------------------------+-------------------+
| mysql-bin.000002 |      730 | db01         | mysql,information_schema,performance_schema |                   |
+------------------+----------+--------------+---------------------------------------------+-------------------+
1 row in set (0.00 sec)

配置从数据库节点

#创建数据目录
mkdir -p /docker/mysql/slave/data
#创建日志目录
mkdir -p /docker/mysql/slave/logs
#创建配置文件目录
mkdir -p /docker/mysql/slave/conf
#创建自定义的配置文件
cd /docker/mysql/slave/conf
touch my.cnf
vim my.cnf

my.cnf文件内容

[client]
# mysql客户端默认字符集
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 跳过密码登录
#skip-grant-tables
#bind-address = 127.0.0.1
init_connect='SET collation_connection = utf8mb4_general_ci'
init_connect='SET NAMES utf8mb4'
# mysql服务端默认字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake
# datadir=/var/lib/mysql  

# 从服务器唯一ID
server-id = 2  
# 开启中继日志
relay-log=mysql-relay
# 从机,1 只读 0 读写(默认是0)
read-only=1
# 启用二进制日志,日志的存放地址,如果从机变成主机可以继续使用bin日志
# log-bin=mysql-slave-bin
# 使用mysql_native_password插件的认证
# default_authentiction_plugin=mysql_native_password

运行容器

docker run -p 3341:3306 --name mysql_slave --privileged=true \
-v /docker/mysql/slave/conf:/etc/mysql/conf.d \
-v /docker/mysql/slave/logs:/var/log/mysql \
-v /docker/mysql/slave/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.37 --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake 

进入容器

docker ps -a
docker exec -it mysql_slave /bin/bash
# 打开MySQL,输入密码
mysql -uroot -p
# 创建数据库
create database db01;

设置同步信息

CHANGE MASTER TO MASTER_HOST='ip地址',
MASTER_PORT=3340,
MASTER_USER='slave',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_CONNECT_RETRY=30,
MASTER_LOG_POS=730;

开始同步

start slave;
show slave status \G;  # 检查状态
# 如果结果下面的字段为Yes 代表配置成功
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值