mysql主从配置
由于机器限制,在两台机器上搞主从似乎有点奢望,于是改用docker玩玩MySQL的主从配置。
前提
假设已经安装好docker了,另外,本测试基于centos系统。
安装mysql
docker pull mysql:5.7
设置主库
-p | 容器对外端口:容器内部端口 |
---|---|
--name |
容器名称 ,docker rename 源名称 新名称 进行改名 |
-e | 传递环境变量、设置密码 |
docker run -p 9990:3306 --name myqlMaster -e MYSQL_ROOT_PASSWORD=123@456 -d mysql:5.7
设置从库
docker run -p 9991:3306 --name mysqlSlave -e MYSQL_ROOT_PASSWORD=123@456 -d mysql:5.7
查看docker容器
-a | 带上参数a,显示所有容器,默认显示运行中的容器 |
---|
docker ps
或
docker ps -a
进入主库和从库的容器内
-it | 后边是容器的id 号 |
---|---|
/bin/bash | 启动容器后启动bash |
docker exec -it df247720c8d6 /bin/bash
docker exec -it df247720c8d6 /bin/bash
设置主库的my.cnf文件
插曲
一般用vi、vim编辑文件,在这个容器内需要安装一下:
apt-get update
apt-get install vim
server-Id | 注意起名的Id不能和其他库重复了 |
---|---|
log-bin | 给日志文件起个名字,从库从该文件进行备份 |
重启mysql
重启mysql服务后,容器停止并退出,docker start 容器名称,重新开启即可,然后运行上述exec命令,重新进入
service mysql restart
docker start mysqlMaster
创建用于主从同步的账号
备注
在主库中,创建用于同步数据的账号,授予账号REPLICATION CLIENT权限,这样我们可以使用 show master status
, show slave status
和 show binary logs
来确定复制状态。
授予复制账号REPLICATION SLAVE权限,复制才能真正地工作。
CREATE USER 'test'@'%' IDENTIFIED BY '123@456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'%';
配置从库
同理,配置从库的my.cnf文件,然后也是重启
relay-log | 将主服务器的二进制日志读取过来,并记录到从服务器本地relay-log文件 |
---|
关联主库和丛库
登录数据库后,查看主库状态
show master status;
查看主库和从库IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlMaster
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlSlave
进入丛库中进行关联
master_host | 主库的的ip |
---|---|
master_user | 用于主从复制的账号 |
master_host | 主库的的ip |
master_log_filer | 即刚刚的主库的File字段,表明丛库从哪个日志文件同步日志 |
master_log_pos | 即刚刚的主库的Position字段,表明丛库从日志文件的哪个位置开始读 |
master_connect_retry | 连接失败,重试时间,单位秒,默认60 |
change master to master_host='172.17.0.2', master_user='test', master_password='123@456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 336, master_connect_retry=60;
成功
测试
用Navicat连接,如果在服务器上搭建,本地连接时记得ping一下和Telnet一下,可能由于防火墙设置导致无法连接。分别连接主库和丛库,然后在主库新建库和表,刷新丛库,即可得到对应库表。
补充
安全退出容器而不会终止容器
Ctrl+P+Q