前言
记录下docker一台服务器环境下配置mysql主从配置
准备
1.安装docker(环境自己安装)
2.开放3307和3308端口
步骤
1.docker拉取mysql5.7镜像
docker pull mysql:5.7
2.创建两个mysql5.7容器
主数据库容器
docker run -d -p 3307:3306 -v /home/docker/mysql_master/conf:/etc/mysql/conf.d -v /home/docker/mysql_master/data:/var/lib/mysql -v /home/docker/mysql_master/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_master mysql:5.7
从数据库容器
docker run -d -p 3308:3306 -v /home/docker/mysql_slave/conf:/etc/mysql/conf.d -v /home/docker/mysql_slave/data:/var/lib/mysql -v /home/docker/mysql_slave/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_slave mysql:5.7
查看是否创建成功
docker ps -a
4.配置主从数据库my.cnf文件
创建主从数据库容器的时候已经把my.cnf配置文件挂载到/home/docker/mysql_master/和 /home/docker/mysql_slave/目录下,
只需要分别在目录下新建一个set.cnf文件配置就行
主数据库set.cnf配置
[mysqld]
#主同步配置
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
binlog-do-db=test_mysql
从数据库set.cnf配置
[mysqld]
#从同步配置
server-id=2
relay-log-index=slave-relay-bin.index
log_slave_updates=1
replicate-do-db=test_mysql
5.重启容器,更新数据库配置
docker restart 容器id
6.进入主数据库docker容器看下配置情况
docker exec -it 容器id /bin/bash
mysql -uroot -p123456
show master status;
配置已生效
7.主数据库创建test_mysql数据库
8.主数据库给从数据库赋予权限
grant replication slave, replication client on *.* to 'repl'@'121.196.148.138' identified by '123456';
flush privileges ;
'121.196.148.138'服务器ip,
'repl'设置从数据库连接的账号,
'123456'设置从数据库连接的密码
9.进入从数据库docker容器,登录mysql配置
change master to master_host='121.196.147.138',master_user='repl',master_password='123456',master_port=3307,master_log_file='master-bin.000001',master_log_pos=154;
开启从数据库同步
start slave;
查看状态
show slave status\G;
上面显示错误,主数据库连接失败,原因有防火墙端口没有开启,云服务器安全组没有开放端口
Slave_IO_Running 和 Slave_SQL_Running = YES,说明主从同步配置成功。
10.最后用Navicat连接两个数据库,在主数据库在test_mysql中创建表并插入数据测试。
最后
mysql最基础的主从复制就配置好了,mysql复制默认是异步复制,不能保证所有事务都被所有slave接收,下次基于此上再配置半同步复制。