1、拉取mysql
docker pull mysql
2、在服务器1上创建mysql文件夹
mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf
touch /usr/local/mysql/conf/my.cnf
3、在服务器2上创建mysql文件夹
mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf
touch /usr/local/mysql/conf/my.cnf
4、创建容器
docker run -p 3306:3306 --name mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/logs:/var/log/ \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql
5、配置服务器1的mysql文件my.cnf
[mysqld]
server-id=1
auto_increment_offset=1
auto_increment_increment=2
skip-slave-start
log-slave-updates=true
basedir = /var/lib/mysql
注意:mysql(我的默认拉取最新是8.1.0)寻找配置文件会从"/etc/my.cnf","/etc/mysql/my.cnf"和"~/.my.cnf"这三个目录里面去找,这里我挂载了第二个,由于我是挂载了个空的my.cnf到mysql,所以这里"[mysqld]"必须加,否则会报错
6、配置服务器2的mysql文件my.cnf
[mysqld]
server-id=2
auto_increment_offset=2
auto_increment_increment=2
skip-slave-start
log-slave-updates=true
basedir = /var/lib/mysql
注意:此处server-id两个服务器上的必须不一样,否则会报错,配置完之后重启mysql,刷子你配置
7、重启mysql
docker restart mysql
8、1给2赋予权限
进入容器:
docker exec -it mysql bash
以root用户登录mysql:
mysql -uroot -p密码
创建slave用户
create user 'slave'@'%' identified by '123456';
给slave用户赋权(如果此处报错root用户没有赋权的权限,重启mysql,退出到服务器命令那里,docker restart mysql)
grant all privileges on *.* to 'salve'@'%' with grant option;
刷新权限:
flush privileges;
初始化bin-log日志
reset master;
查看日志文件的名称、位置,下面要用到
show master status;
注意:'slave'@后面如果是'localhost'意思是只允许本机登录,%表示支持远程登录,若果追求数据库安全的话后面可以加精确的ip,表示只允许某台服务器以slave用户登录
9、 2给1赋予权限(同上,一模一样)
10、容器同步设置1
退出mysql登录状态,远程登录获取公钥:
mysql -uslave -p123456 -h服务器2的ip -P3306 --get-server-public-key
退出远程登录,登录root用户,更改日志文件名称和记录的位置:
change master to master_host='服务器2的ip',master_port=3306,master_user='slave',master_password='123456',master_log_file='日志文件的名称',master_log_pos=日志文件的位置;
然后开启同步 执行:
start slave;
查看是否成功:
show slave status\G #此处没有分好“;”,否则会报错No query specified
11、容器同步设置2
mysql -uslave -pzyqsb6 -h服务器1的ip -P3306 --get-server-public-key
change master to master_host='服务器1的ip',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120;
start slave;
show slave status\G
12、成功
这两个都yes了,就成功了,使用Navicat在其中农一个创建数据库,另外一个都会做同样的复制。