这里使用docker创建两个mysql服务来实现mysql的主从复制,前提条件:
1.主从数据库的版本最好一致
2.启用二进制日志
3.服务器唯一ID
一、使用docker创建主从mysql
1.拉取镜像
docker pull hub.c.163.com/nce2/mysql:5.6
下载完成以后,可以通过下面命令查看已下载镜像:
docker images
2.创建容器
创建自定义网络(注意不能创建172.17.0.0网段的,因为已经存在)
docker network create --subnet=172.18.0.0/16 mynetwork
查看网络类型:
docker network ls
使用下面命令创建固定ip容器并启动
docker run --name mysql-master2 -d --restart=always --net mynetwork --ip 172.18.0.2 -p 3316:3306 hub.c.163.com/nce2/mysql:5.6
其中
-d 后台运行
-p 宿主机port:容器port (端口映射)
--name 容器名称
--net mynetwork --ip使用自定义网络mynetwork设置固定ip
--restart=always 开机自动启动
查看正在运行的容器:
docker ps
同理创建从mysql:
docker run --name mysql-slave2 -d --restart=always --net mynetwork --ip 172.18.0.3 -p 3317:3306 hub.c.163.com/nce2/mysql:5.6
二、开启主从复制
1.主数据库配置
1.通过如下命令进入mysql-master2容器的交互界面:
docker exec -it mysql-master2 bash
2.登录mysql
mysql -uroot -p
3.如果没设置密码,此时不需要输入密码 直接回车就好,进入mysql后修改密码和允许远程登录
set password for 'root'@'localhost'=password('root');
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
然后退出
exit
4.修改my.cnf文件
vi /etc/mysql/my.cnf
5.提示命令未找到,需要安装vim,步骤如下
apt-get update
更新完成后进行安装,需要点击Y时点个Y
apt-get install vim
6.再次执行vi命令修改my.cnf文件,在[mysqld]下加上以下配置:
[mysqld]
## 服务id,要唯一
server-id=1
## 开启二进制日志功能,可以随便取
log-bin=mysql-bin
保存退出,重启容器使得mysql重启
docker restart 14f4fb4236a6
7.再次进入容器,查看主数据库所在容器的ip,后面从数据库需要用到,我这里是172.17.0.2
ip addr
8.登录mysql创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
创建用户wly:
CREATE USER 'wly'@'%' IDENTIFIED BY 'root';
授予权限:
GRANT REPLICATION SLAVE ON *.* TO 'wly'@'%';
刷新权限:
flush privileges;
9.查看主服务状态
show master status
其中
File:二进制文件
Position:二进制文件的位置
这两个值在从数据库中会用到,在此之前暂时不要动主数据库,否则这两个值会变化。
再开启一个窗口来配置从数据库
2.从数据库配置
1.进入mysql-slave2容器的交互界面:
docker exec -it mysql-slave2 bash
(设置密码、允许远程登录和安装vim略,同上)
2.修改my.cnf文件
vi /etc/mysql/my.cnf
在[mysqld]下加上以下配置:
[mysqld]
## 设置server-id,唯一
server-id=2
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
保存后退出,重启容器使得mysql重启
docker restart aec7f534fd20
3.重启完成后重新进入mysql-slave2容器的交互界面,登录mysql,设置主数据库相关信息,如下:
CHANGE MASTER TO
MASTER_HOST='172.18.0.2',
MASTER_USER='wly',
MASTER_PASSWORD='root',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=489;
其中
MASTER_HOST:主数据库的主机ip
MASTER_USER:主数据库创建的同步用户
MASTER_PASSWORD:同步用户对应的密码
MASTER_PORT:容器内部端口即主数据库的端口
MASTER_LOG_FILE:二进制日志文件
MASTER_LOG_POS:日志文件的位置
4.开启主从复制:
start slave
5.查询主从同步状态:
show slave status \G;
当SlaveIORunning和SlaveSQLRunning都Yes的时候说明主从复制开启成功
如果SlaveIORunning为No或Connection可能是同步用户没有权限或者密码错误
三、验证主从复制
1、在主数据库中创建一个数据库wly
create database wly;
2.在从数据库中查看所有数据库
show databases;
发现从数据库也自动创建了wly数据库,说明主从复制成功!
我的微信公众号