1、下载镜像
docker search mysql
找到使用的版本
docker pull +镜像版本
运行镜像 并挂载
docker run -p 3307: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:8.0
编辑my.cnf文件
[client]
default_character_set=UTF8MB4 #设置编码格式`
[mysqld]`
server_id=101 #指定serverid
binlog-ignore-db=mysql#指定忽视数据库
log-bin=mysql-bin#指定mysql日志文件名
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7 #指定过期时间
slave_skip_errors=1062 #指定跳过特定一场,主键重复
lower_case_table_names=2
gtid_mode=ON #开启global transction模式不再使用指定postion同步
enforce_gtid_consistency=ON
collation_server=utf8mb4_0900_ai_ci
character_set_server=UTF8MB4
修改完配置后重启master实例
docker restart mysql-master
进入mysql-master容器 并进入数据库
docker exit -it mysql-master /bin/bash
mysql -uroot -proot
创建数据同步用户
create user 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
.
运行从库mysql
修改从库cnf
[client]
default_character_set=UTF8MB4 #设置编码格式
[mysqld]
server_id=102 #指定serverid
binlog-ignore-db=mysql#指定忽视数据库
log-bin=mysql-slave-bin#指定mysql日志文件名
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7 #指定过期时间
slave_skip_errors=1062 #指定跳过特定异常,主键重复
lower_case_table_names=2
gtid_mode=ON #开启global transction模式不再使用指定postion同步
ENFORCE_GTID_CONSISTENCY = ON
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
collation_server=utf8mb4_0900_ai_ci
character_set_server=UTF8MB4
两种方式,配置从库连接到主库
1、根据postion从指定位置开始同步
主要使用第二种,8.0之后的语法
2、gtid的方式,自动同步,该方式在从库挂了之后重启,会自动从上次的位置自动同步。
CHANGE REPLICATION SOURCE TO SOURCE_HOST = '192.168.1.51', SOURCE_PORT = 3306, SOURCE_USER = 'slave', SOURCE_PASSWORD = '123456', SOURCE_AUTO_POSITION = 1;
START REPLICA; // slave start;
//START REPLICA IO_THREAD; //单独开启io线程跟sql线程
//START REPLICA SQL_THREAD;