1、下载mysql镜像
docker pull mysql:5.7.21
2、在home下建立mydata目录
在/home/mydata/mysql下面建立两个目录 conf与data
3、docker运行起来两个服务器的服务
docker run -p 3306:3306 --name mastermysql -v /home/mydata/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mastermysql -d mysql:5.7.21
docker run -p 3306:3306 --name slavemysql -v /home/mydata/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=slavemysql -d mysql:5.7.21
4、开放下面的防火墙端口以便访问
firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload firewall-cmd --list-all
5、主要是考虑配置文件,拷贝与使用
docker exec -it mastermysql bash
实际配置文件在/etc/mysql/conf.d里的mysql.cnf
docker top mastermysql 查看容器mastermysql的进程信息
docker inspect mastermysql 查看docker容器更多详尽信息
6、修正主从配置文件
看这个容器的使用的mysql配置文件如下
/etc/mysql/conf.d 这个目录里的mysql.cnf
启动的时候用宿主/home/mydata/mysql/conf/master.cnf的把上面的替换掉就可以了
从服务器修改成slave.cnf
这样只要编辑宿主的两个配置文件就可以了
配置好master.cnf
server-id=1
log-bin=mysql-bin
与slave.cnf
server-id=2
log-bin=mysql-bin
用docker cp 或就直接用mount的
df -g看到的文件系统来进行拷贝 如下
cp /home/mydata/mysql/conf/mysql.cnf /var/lib/docker/overlay2/f6ac448af8a0ab4e78ed7311ef8b4498ecaf45d4596241a4a94f4b7086f88467/merged/etc/mysql/lqy
修改或覆盖配置后docker restart mastermysql 重启
show variables like '%%'; 可以查询mysql所有相关参数值
/etc/mysql/mysql.conf.d/mysqld.cnf 目前只能在这个版本的这个文件进行修改加入主从参数,启动mysql才有效,用下面的查询sql命令可以看是否设置master正常,另外这个版本的数据目录是在
/var/lib/mysql 之前好像搞错了
show variables like '%log_bin%';
show master status;
主mysql
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup';
show grants for 'backup'@'%';
从mysql
CHANGE MASTER TO
MASTER_HOST='192.168.199.151',
MASTER_PORT=3306,
MASTER_USER='backup',
MASTER_PASSWORD='backup';
START SLAVE;
show slave status;
好像新的docker启动服务后,上面slave需要重新执行一下,实际生产要考虑自动吧
这样新建的数据库与表数据等都会从主服务器同步到从服务器上了
修改成下面的方式就可以正常使用了
先停掉上面的docker stop mastermysql docker rm mastermysql
docker run -p 3306:3306 --name mastermysql -v /home/mydata/mysql/data:/var/lib/mysql -v /home/mydata/mysql/conf/master.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=mastermysql -d mysql:5.7.21
docker run -p 3306:3306 --name slavemysql -v /home/mydata/mysql/data:/var/lib/mysql -v /home/mydata/mysql/conf/slave.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=slavemysql -d mysql:5.7.21