1)安装 mysql
Ubuntu 中安装一台 mysql 了, docker 安装另外一台 mysql
获取 mysql 的镜像, 主从同步尽量保证多台 mysql 的版本相同, 我的 ubuntu 中存在的 mysql 是 5.7.22 版本, 所以获取 5.7.22 版本的镜像为例:
docker image pull mysql:5.7.22
或
docker load -i mysql_docker_5722.tar
运行 mysql docker 镜像, 需要在宿主机中建立文件目录用于 mysql 容器保存数据和读取配置文件.
在家目录中 (/home/python) 中创建目录, 将 mysql 的配置文件放到此目录中
- cd ~
- mkdir mysql_slave
- cd mysql_slave
- mkdir data
- cp /etc/mysql/mysql.conf.d ./
将 docker 运行的 mysql 作为 slave 来运行, 开启前需要修改配置文件.
编辑 ~/mysql_slave/mysql.conf.d/mysqld.cnf 文件, 修改
- port = 8306
- general_log = 0
- server-id = 2
让此台 mysql 运行在 8306 端口上, 且 mysql 编号为 2
创建 docker 容器
docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/python/mysql_slave/data:/var/lib/mysql -v /home/python/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.22
MYSQL_ROOT_PASSWORD 是创建 mysql root 用户的密码
测试, 在 ubuntu 中使用 mysql 命令尝试连接 docker 容器中的 mysql
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
2)备份主服务器原有数据到从服务器
如果在设置主从同步前, 主服务器上已有大量数据, 可以使用 mysqldump 进行数据备份并还原到从服务器以实现数据的复制.
在主服务器 Ubuntu 上进行备份, 执行命令:
mysqldump -uroot -pmysql --all-databases --lock-all-tables> ~/master_db.sql
-u : 用户名
-p : 示密码
--all-databases : 导出所有数据库
--lock-all-tables : 执行操作时锁住所有表, 防止操作时有数据修改
~/master_db.sql : 导出的备份数据 (sql 文件) 位置, 可自己指定
在 docker 容器中导入数据
mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql
3)配置主服务器 master(Ubuntu 中的 MySQL)
编辑设置 mysqld 的配置文件, 设置 log_bin 和 server-id
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
重启 mysql 服务
sudo service mysql restart
登入主服务器 Ubuntu 中的 mysql, 创建用于从服务器同步数据使用的帐号
- mysql -uroot -pmysql
- GRANT REPLICATION SLAVE ON *.* TO mailto:'slave'@'%' identified by 'slave';
- FLUSH PRIVILEGES;
获取主服务器的二进制日志信息
SHOW MASTER STATUS;
File 为使用的日志文件名字, Position 为使用的文件位置, 这两个参数须记下, 配置从服务器时会用到.
4)配置从服务器 slave (docker 中的 mysql)
进入 docker 中的 mysql
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
执行
change master to master_host='127.0.0.1', master_user='slave', master_password='slave',master_log_file='mysql-bin.000006', master_log_pos=590;
master_host: 主服务器 Ubuntu 的 ip 地址
master_log_file: 前面查询到的主服务器日志文件名
master_log_pos: 前面查询到的主服务器日志文件位置
启动 slave 服务器, 并查看同步状态
- start slave;
- show slave status \G
来源: http://www.linuxidc.com/Linux/2018-08/153588.htm