IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker Mysql5.7 + Mycat1.6.7.1主从复制读写分离配置 -> 正文阅读

[系统运维]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,双击启动

?收工,请点个赞再走

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:27:51  更:2022-01-12 00:29:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:31:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码