Docker Mysql5.7 + Mycat1.6.7.1主从复制读写分离配置
Posted Jason_ou2021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker Mysql5.7 + Mycat1.6.7.1主从复制读写分离配置相关的知识,希望对你有一定的参考价值。
前言:随着项目用户数越来越多,单机数据库已经不能满足业务需求了,为了减少单库压力,及容灾,配置读写分离。故名思意,即把写在一个数据库,读在另外的数据库。写的库叫主库(Master),读的库叫从库(Slave),读写分离的前提是把mysql配置主从复制,是基于Mysql提供的bin-log sql日志复制功能,需要配置。下面是具体操作。
1.配置主从复制
A.准备至少两台服务器,并且所有服务器安装好Docker环境(这里不写出来了),拉取Mysql5.7镜像。这里注意服务器的防火墙和云服务器的安全组是否把3306端口开放。
B.我这边用的是Docker搭建的Mysql5.7服务,3台Ubuntu服务器,分别是:主服务器(139.224.69.7:3306),从服务器1(139.224.0.119:3306),从服务器2(106.15.33.199:3306),用的Docker启动,命令:
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --restart=always -v /root/data/mysql/conf:/etc/mysql -v /root/data/mysql/logs:/var/log/mysql -v /root/data/mysql/data:/var/lib/mysql -d mysql:5.7
启动后,最好用Navicat连接测试一下。
把剩下两台从服务器也用Docker启动Mysql,命令:
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --restart=always -v /root/data/mysql/conf:/etc/mysql -v /root/data/mysql/logs:/var/log/mysql -v /root/data/mysql/data:/var/lib/mysql -d mysql:5.7
启动后,最好用Navicat连接测试一下。
C.配置主从库Mysql的配置文件,如下:
主库的(注意要同步复制的数据库名称)
[client]
port = 3306
default-character-set = utf8mb4
[mysql]
port = 3306
default-character-set = utf8mb4
[mysqld]
##########################
# summary
##########################
#bind-address = 0.0.0.0
#port = 3306
##########################
# log bin
##########################
server-id = 100 #必须唯一
log_bin = mysql-bin #开启及设置二进制日志文件名称
binlog_format = MIXED
sync_binlog = 1
expire_logs_days =7 #二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
#binlog_cache_size = 128m
#max_binlog_cache_size = 512m
#max_binlog_size = 256M
binlog-do-db = test #要同步的数据库名,只有这个名称会同步复制数据,按需更改
binlog-ignore-db = mysql #不需要同步的数据库
binlog_ignore_db = information_schema
binlog_ignore_db = performation_schema
binlog_ignore_db = sys
##########################
# character set
##########################
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
从库的
[client]
port = 3306
default-character-set = utf8mb4
[mysql]
port = 3306
default-character-set = utf8mb4
[mysqld]
##########################
# summary
##########################
#bind-address = 0.0.0.0
#port = 3306
##########################
# log bin
##########################
server-id = 110 #尽量不要与其他库的值相同,同一局域网会冲突
##########################
# character set
##########################
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
explicit_defaults_for_timestamp = ON
sql_mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
使用dockers在宿主机上的/root/data/mysql/conf这个目录下用Vim创建my.cnf文件,并把上面主库内容粘贴到主库所在的主机上的Vim编辑器中,从库相同的,把从库配置文件贴在从库所在的主机上的Vim编辑器中,Shift+zz保存退出,再用docker命令重启mysql,主从库都需要进行重启操作,不然配置文件不生效。
docker restart mysql
D.用docker命令进入主库的mysql容器,登陆MySQL,命令如下
docker exec -it mysql bash
mysql -u root -p
命令创建同步复制用户,授予复制同步访问的权限,
#创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
#授权
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
slave是用户名,123456是密码,根据自身需求赋值
Mysql命令查看log-bin是否开启
show variables like 'log_bin';
ON为开启
MySQL命令查看主库Master的状态
show master status
把File的名称mysql-bin-log.000006和Position 154记录下来后面配置从库要用,记录自己的值,我这边可能与你的不一样。
到此主库配置完成。
E.用docker命令进入从库的mysql容器,登陆MySQL,命令如下
docker exec -it mysql bash
mysql -u root -p
MySQL命令配置从库的复制主库
#从库的复制主库信息
CHANGE MASTER TO MASTER_HOST='139.224.69.7',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin-log.000006',
MASTER_LOG_POS=154;
#启用同步复制
start slave;
MASTER_HOST='139.224.69.7', //主库IP
MASTER_PORT=3306, // 主库端口
MASTER_USER='slave', //主库复制授权用户名
MASTER_PASSWORD='123456', //主库授权密码
MASTER_LOG_FILE='mysql-bin-log.000006', //主库bin-log文件名 主库show master status返回结果
MASTER_LOG_POS=154; // 主库bin-log文件中的位置 主库show master status返回结果
注意:如果主库信息配置错误,先用stop slave;命令停止,再用reset slave;重置主库信息,或者主从同步过程中发生意外停止,也可以stop slave;再reset slave;再进行MySQL命令配置从库的复制主库(上面的命令)
MySQL命令查看从库同步状态
show slave status \\G
Slave_IO_Running:Yes,Slave_SQL_Running:Yes说明配置成功,如果没有成功,检查MySQL服务器外部是否能连接,用Navicat连接。安全组,防火墙等等。
检查主从复制是否生效,用Navicat连接Master主库,建一个数据库test,必须是test,因为my.cnf中配置同步的数据库只有test,也可以改,再重启MySQL。
在主库创建一个test数据库,在创建一个user表,字段id,name,age,新增一条数据,id=8,name=Jason123,age=26,查看主从库如下
2.配置Mycat的主从复制(windows下的)
尽管在写这篇Blog时Mycat一间有2.0Release版,但是考虑到Bug较多不稳定,且国内大部分公司还在使用1.6,所以我这边也使用1.6的配置。Mycat的来源功能特性用途自行百度。配置windows下的,Linux的配置一样的,启动方式命令行启动在bin目录下执行mycat install,mycat start即可
A. 下载Mycat,解压
进入conf目录,找到server.xml,用编辑器打开,我用Vscode,
配置访问Mycat的用户名密码和数据库名,保存
再找到schema.xml,修改如图
再到Mycat的bin目录,找到startup_nowrap.bat,双击启动
收工,请点个赞再走
以上是关于Docker Mysql5.7 + Mycat1.6.7.1主从复制读写分离配置的主要内容,如果未能解决你的问题,请参考以下文章
Docker Mysql5.7 + Mycat1.6.7.1主从复制读写分离+水平分库分表配置
Docker Mysql5.7 + Mycat1.6.7.1主从复制读写分离配置
Docker Mysql5.7 + Mycat1.6.7.1主从复制读写分离配置