最近准备学习下数据库中间件mycat,配置mycat读写分离前提要先配置好mysql主从复制。今天把整个过程说一下,首先环境 服务器为centos7系统,mysql版本5.7。
一、启动容器
1、新建mysql主从容器的挂载目录
(1)mysql-master(主)
//mysql配置文件
mkdir -p /data/mysql-master/conf
//mysql数据文件路径
mkdir –p /data/mysql-master/data
//日志文件路径
mkdir -p /data/mysql-master/logs
(2)mysql-slave(从)
//mysql配置文件
mkdir -p /data/mysql-slave/conf
//mysql数据文件路径
mkdir –p /data/mysql-slave/data
//日志文件路径
mkdir -p /data/mysql-slave/logs
2.启动容器
(1)mysql-master
docker run -p 3306:3306 --name mysql-master\
--restart=always \
-v /data/mysql-master/conf:/etc/mysql \
-v /data/mysql-master/logs:/var/log/mysql \
-v /data/mysql-master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
(1)mysql-slave
docker run -p 3307:3306 --name mysql-slave\
--restart=always \
-v /data/mysql-slave/conf:/etc/mysql \
-v /data/mysql-slave/logs:/var/log/mysql \
-v /data/mysql-slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
二、主从配置
1、配置主机 mysql-master
因为已经做了外部挂载,所以直接进入挂载目录进行配置即可
vim /data/mysql-master/my.cnf 按i进入插入模式,添加以下内容
[mysqld]
server-id=1
log-bin=mysql-bin
#下面的如果要所有数据库都进行复制,就不用写
replicate-do-db=testdb #指定同步的数据库
replicate-ignore-db=mysql 此配置为指定不同步的数据库
然后重启mysql-master容器,让它重新加载配置文件
docker restart 容器id
2、创建拥有主从复制权限的账户
(1)进入mysql-master容器内部
`docker exec -it mysql-master bash`
(2)登入mysql
`mysql -u root -proot`
(3)创建slave账户,赋予主从复制权限
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
3、查看mysql-master状态
show master status;
File:binlog日志位置
Position : 节点号(mysql主从复制 是从节点开始复制的,这跟redis不太一样)
4、配置从机 mysql-slave
因为已经做了外部挂载,所以直接进入挂载目录进行配置即可
vim /data/mysql-master/my.cnf 按i进入插入模式,添加以下内容
[mysqld]
server-id=2
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=mysql-slave-relay-bin
然后重启mysql-master容器,让它重新加载配置文件
docker restart 容器id
5、主从链接
进入从机 mysql-slave 容器内部,并登录mysql
执行下面的代码
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 1300, master_connect_retry=30;
master_host:主机IP,为容器独立IP,可以通过一下命令查询
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
master_port:主机端口
master_log_file:binlog日志位置,刚才查询主机状态获取的
master_log_pos:主机节点位置
master_connect_retry:重新链接主机间隔时间
然后启动从机的主从复制
start slave;
到这里就完成了mysql 的主从配置。下面简单测试一下
三、mysql主从测试
进入主机 mysql-master 容器登入mysql,创建数据库testdb(因为做主机主从配置时,设置了要复制的数据库为testdb,所以这块也要创建testdb数据库)
create database testdb;
进入从机 mysql-slave 容器登入mysql,执行
show databases;
可以看到从机也有了testdb这个数据库
然后可以在主机testdb中创建个表
create table user(id int,name varcher(20));
进入从机,切换到testdb数据库
use testdb
然后执行
show tables;
发现从机testdb数据库里已经有了user这张表了。
至此就完成了mysql的主从复制 配置。