搭建主数据库
1、拉取镜像
docker pull mysql:5.7
2、运行主数据库
docker run -p 12345:3306 --name mysql_master \
-v /docker/mysql_master/conf:/etc/mysql/conf.d \
-v /docker/mysql_master/logs:/logs \
-v /docker/mysql_master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
3、查看mysql运行没有有报错
docker logs mysql_master
4、创建my.cnf文件
去配置文件所在目录
cd /docker/mysql_master/conf
创建配置文件,因为这个目录映射到容器内的,所以说没必要进入容器配置,并且mysql容器并没有vim/vi编辑器,用的话还需要去安装,非常麻烦
vim my.cnf
粘贴以下内容
[mysqld]
## 同一局域网内注意要唯一
server-id=1
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
5、进入mysql容器
docker exec -it mysql_master bash
6、重启mysql服务,重启之后mysql容器会被停掉
service mysql restart
7、启动mysql容器
docker start mysql_master
8、校验mysql能否搭建为主从复制
# 进入mysql容器
docker exec -it mysql_master bash
# 连接数据库
mysql -uroot -p123456
# 查看skip_networking状态
show variables like '%skip_networking%';
状态为OFF则ok
9、创建一个普通用户,专门用来做数据同步操作
# 创建用户
CREATE USER 'repl'@'%' identified by '123456';
# 授权
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
搭建从数据库
可以在别的机器搭建也可以在同一台机器搭建,我是在另一台服务器搭从数据库,操作基本和主数据库一样。
1、拉取镜像
2、运行镜像,端口 1024~65535之间 随便改,只要没被使用过就行
docker run -p 12345:3306 --name mysql_slave \
-v /docker/mysql_slave/conf:/etc/mysql/conf.d \
-v /docker/mysql_slave/logs:/logs \
-v /docker/mysql_slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
3、创建配置文件
# 进入配置文件目录
cd /docker/mysql_slave/conf
# 创建配置文件
vim my.cnf
复制一下内容
[mysqld]
server-id=2
4、重启mysql容器,使配置生效
docker restart mysql_slave
5、配置主服务器信息
# 进入mysql容器
docker exec -it mysql_slave bash
# 连接数据库
mysql -uroot -p123456
# 配置主数据的ip,用户名、密码,需要注意的是主数据库的端口号,如果发现端口写错了,只要stop slave,修改端口再运行这条指令
CHANGE MASTER TO MASTER_HOST='118.31.8.238', MASTER_PORT=12345,MASTER_USER='repl',MASTER_PASSWORD='123456';
# 启动salve
start slave;
出现下面画面表示成功,如果提示叫你指定服务id,则配置没生效,需要重新创建配置文件并重启
如果是在同一台机器上搭建的话,需要查看主数据库的ip
docker inspect --format=’{{.NetworkSettings.IPAddress}}’ mysql_master
可以看到主数据库的ip为172.17.0.3
6、查看同步状态
show slave status \G;
没有看到啥ERROR显示,表示连接主库成功
Navicat连接测试
使用navicat分别连接主数据库、从数据库(注意:如果使用云服务器,记得安全组那边开放端口)
测试在主数据库创建数据库,从数据库会不会同步,可以看到同步成功
测试在主数据库删除数据库,同步成功
测试在主数据库表添加数据,同步成功