前言
最近在学docker,应业务需求,要研究mycat的使用,为了方便学习测试,就想着用docker的镜像和容器来构造所有的组件。
mysql主从架构搭建
创建总目录:
mkidr mycat-ms
cd mycat-ms
在宿主机创建本地目录,印射为容器的数据目录,方便以后查看数据内容。
mkdir mysql-ms/data/{master,slave} -p
在宿主机创建配置文件,印射为容器的配置文件。可通过本地修改配置文件,达到修改容器配置文件的效果。
master配置文件: mysql-ms/etc/master.cnf
[mysqld]
# 开启logbin
log-bin = mysql-bin
binlog_format = mixed
# 设置唯一服务ID,要跟slave不同
server-id=1
datadir = /var/lib/mysql
slave 配置文件: mysql-ms/etc/slave.cnf
[mysqld]
# 开启log-bin
log-bin = mysql-bin
binlog_format = mixed
# 开启relay-log
relay-log = mysql-relay
# 设置唯一服务ID,要跟master不同
server-id = 3
datadir = /var/lib/mysql
创建网络mscat,用于各容器之间通信
docker network create mscat
分别启动master、slave容器(用的是docker官方提供的 mysql5.6.36 的镜像)
docker run --name mysql-master -v $PWD/mysql-ms/etc/master.cnf:/etc/mysql/my.cnf -v $PWD/mysql-ms/data/master:/var/lib/mysql --net=mscat -e MYSQL_ROOT_PASSWORD='yueioe123' -d mysql:5.6.36
docker run --name mysql-slave -v $PWD/mysql-ms/etc/slave.cnf:/etc/mysql/my.cnf -v $PWD/mysql-ms/data/slave:/var/lib/mysql --net=mscat -e MYSQL_ROOT_PASSWORD='yueioe123' -d mysql:5.6.36
master上,创建主从复制账号:
docker exec -ti mysql-master mysql -uroot -p'yueioe123' -e "CREATE USER 'repl'@'%' IDENTIFIED BY 'repl123';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';"
在master上,获取复制开始的二进制文件和位置(File和Position)
# docker exec -ti mysql-master mysql -uroot -p'yueioe123' -e "show master status\G"
*************************** 1. row ***************************
File: mysql-bin.000005
Position: 441
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
在slave上,连接master:
# 连接master
docker exec -it mysql-slave mysql -uroot -p'' -e "CHANGE MASTER TO MASTER_HOST='mysql-master',MASTER_USER='repl',MASTER_PASSWORD='repl123',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=441;"
# 启动 slave 线程
docker exec -it mysql-slave mysql -uroot -pyueioe123 -e "start slave;"
查看主从是否成功:
# docker exec -it mysql-slave mysql -uroot -pyueioe123 -e "show slave status\G"
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
# docker exec -ti mysql-master mysql -uroot -pyueioe123 -e "create database test;"
# docker exec -ti mysql-slave mysql -uroot -pyueioe123 -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
mycat读写分离
mycat是用java语言编写的,需要jdk的支持,这次将安装mycat1.6,jdk版本需要1.7以上