1、新建主服务器实例3307
mkdir -p /mydata/mysql-master/log
mkdir -p /mydata/mysql-master/data
mkdir -p /mydata/mysql-master/conf
docker run -p 3307:3306 --privileged=true \
--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/conf.d \
-e MYSQL_ROOT_PASSWORD=weizehong1987 \
-d mysql:8.0.29 \
--lower_case_table_names=1
启动失败,怎么办?
我们可以通过如下命令来获取容器的日志地址
docker inspect --format '{{.LogPath}}' 97069f94437b
image.png
看看日志就知道问题了
客户端链接出现了问题:
image.png
出现这种问题的原因是:此时的MySQL配置不支持[远程连接]。
解决:
https://blog.csdn.net/qq_40181114/article/details/123591068
2、进入/mydata/mysql-master/conf 目录下新建my.cnf
[client]
default_character_set=utf8mb4
[mysqld]
collation_server=utf8mb4_bin
character_set_server=utf8mb4
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
log_bin_trust_function_creators=1
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
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错误是因为主从数据库数据不一致
replica_skip_errors=1062
3、修改完配置后重启master实例
docker restart mysql-master
4、进入mysql-master容器
docker exec -it mysql-master /bin/bash
mysql -uroot -p
5、master容器实例内创建数据同步用户
create user 'slave'@'%' identified by '123456';
grant replication slave,replication client on *.* to 'slave'@'%';
6、新建从服务器容器实例3308
mkdir -p /mydata/mysql-slave/log
mkdir -p /mydata/mysql-slave/data
mkdir -p /mydata/mysql-slave/conf
docker run -p 3308:3306 --privileged=true \
--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/conf.d \
-e MYSQL_ROOT_PASSWORD=weizehong1987 \
-d mysql:8.0.29 \
--lower_case_table_names=1
7、进入/mydata/mysql-slave/conf 目录下新建my.cnf
[client]
default_character_set=utf8mb4
[mysqld]
collation_server=utf8mb4_bin
character_set_server=utf8mb4
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
log_bin_trust_function_creators=1
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能, 以备slave作为其它数据库实例的master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
replica_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates 表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
8、修改完配置后重启slave实例
docker restart mysql-slave
9、在主数据库中查看主从同步状态
show master status;
image.png
10、进入mysql-slave容器
docker exec -it mysql-slave /bin/bash
11、在从数据库中配置主从复制
change master to master_host='宿主机ip',master_user='slave',master_password='123456',master_port=3307,
master_log_file='mall-mysql-bin.000002',master_log_pos=705,master_connect_retry=30,
GET_MASTER_PUBLIC_KEY=1;
说明:mysql8复制用户的身份验证插件是:caching_sha2_password,则需要指定GET_MASTER_PUBLIC_KEY=1;
12、在从数据库中查看主从同步状态
show slave status \G;
image.png
13、在从数据库中开启主从同步
start slave;
执行完之后,这里需要稍微等一会
14、查看从数据库状态发现已经同步
show slave status \G;
image.png
15、主从复制测试
在主机新建数据库,新建数据表,新增数据,然后在从机查看
16、问题
image.png
mysql 5.7 默认身份验证插件default_authentication_plugin是:mysql_native_password
mysql 8.0 默认身份验证插件default_authentication_plugin是:caching_sha2_password
在master执行
create user 'slave'@'%' identified with mysql_native_password by '123456';
create user 'slave'@'%' identified with mysql_native_password by '123456';
网友评论