1.首先利用Docker拉取MySql最新镜像
Docker pull mysql
2.在linux中根目录下创建文件/home/username/tmp/mysql/conf/hmy.cnf、/home/username/tmp/mysql/data(也可以自己指定其他路径),而后利用运行mysql主服务器容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /home/username/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /home/username/tmp/mysql/data:/var/lib/mysql -d mysql
3.以同样方式,在linux中根目录下创建文件/home/username/tmp/mysql2/conf/hmy.cnf、/home/username/tmp/mysql2/data(也可以自己指定其他路径),而后利用运行mysql从服务器容器。注意此时容器name为mysql2,-p端口指定3306:3307,意味liunx端口3307对应本容器mysql端口3306.
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3307 -v /home/username/tmp/mysql2/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /home/username/tmp/mysql2/data:/var/lib/mysql -d mysql
4.主库配置
将挂载的hmy.cnf修改:
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
#指定服务id。在主从集群中,每个mysql该id不能相同
server-id=1
read-only=0
#指定开启远程连接
bind-address=0.0.0.0
重启MySQL服务器:systemctl restart mysqld
查看二进制日志坐标 show master status ;
其中file : 从哪个日志文件开始推送日志文件 position : 从哪个位置开始推送日志
binlog_ignore_db : 指定不需要同步的数据库
5.从库配置
修改配置文件hmy.cnf修改和主库类似,注意server-id要在整个集群中唯一
登录mysql,设置主库配置(8.0.23版本之后使用如下指令)
CHANGE MASTER TO MASTER_HOST='192.168.2.220', MASTER_PORT=3306,
MASTER_USER='root',MASTER_PASSWORD='123',
MASTER_LOG_FILE='binlog.000009 ',MASTER_LOG_POS= 156 ;
#其中 MASTER_HOST为主机ip,MASTER_PORT为该容器对应的liunx端口,MASTER_USER为具有主从复制权限的主服务器用户,MASTER_LOG_FILE为之前在主服务器中查询的二进制文件,MASTER_LOG_POS代表目前二进制文件写到了那里,并从此处读(同步)
开启同步操作
start replica ; #8.0.22之后 start slave ; #8.0.22之前
查看主从同步状态
show replica status ; #8.0.22之后
如查询结果如下代表启动成功:
注:stop slave 停止主从同步服务 reset slave all; 重置主从同步服务
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000002',MASTER_LOG_POS=984;修改二进制文件追踪位置。
后面我使用navicat进行连接mysql,报错:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runnin
后面直接将navciat11更新到了16,成功连接,这个错误是该软件版本和mysql版本问题。
连接时可以主机输入该mysql容器的ip,以及liunx下对应端口以及均有主从复制权限的用户、密码即可。
若无法连接可以尝试使用SSH进行连接