mysql主从复制及读写分离

目录

1.理解主从复制原理

2.完成mysql主从复制

主库配置

 丛库配置

3.实现mysql读写分离

3.1 安装mycat2软件

3.2 使用docker配置一主2从

3.3 创建数据源

3.4创建集群

3.5创建逻辑库

3.6修改逻辑库的数据源

3.7测试读写分离是否成功

3.8测试


1.理解主从复制原理

(1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;
 (2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求master二进制事件
 (3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
简单来说:
从库会生成两个线程,一个I/O线程,一个SQL线程;
I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
主库会生成一个log dump线程,用来给从库I/O线程传binlog;
SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

2.完成mysql主从复制

主库配置

1.主库需要在配置文件/etc/my.cnf设置server_id的值并开启binglog参数
[mysqld]
log_bin=mysql-bin
server_id=120
2.需要创建一个同步账号,并给与主从同步的权限,只用给主库配置
mysql> grant replication slave on *.* to 'rep'@'192.168.27.%' identified by '123456';
mysql> show grants for 'rep'@'192.168.27.%';
3.主库设置锁表设置保证数据一致性
mysql> flush tables with read lock; 
4.主库备份主库的数据库
[root@localhost backup]# mysqldump -uroot -p'Admin123!' -B chap01  db1  gtid  school > /server/backup/db.sql
5.将备份的数据库发给丛库主机
[root@localhost backup]# scp /server/backup/db.sql 192.168.27.121:/tmp
[root@localhost backup]# scp /server/backup/db.sql 192.168.27.122:/tmp
6.在丛库上还原刚才传送的数据库文件,保证主从库一致
[root@localhost tmp]# mysql -uroot -p'Admin123!' < /tmp/db.sql 
[root@localhost tmp]# mysql -uroot -p'Admin123!' < /tmp/db.sql 
7.主库解锁
mysql> unlock tables;
8.查看主库的binlog日志以及其pos位置
show master status;

 丛库配置

1.丛库1配置
mysql> change master to
    -> master_host="192.168.27.120",
    -> master_user="rep",
    -> master_password="123456",
    -> master_log_file="mysql-bin.000001",
    -> master_log_pos=450;
2.开启主从复制
mysql> start slave;
3.验证主从复制是否成功,查看以下两条是否都为yes
mysql> show slave status \G
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
4.在另外一个从主机执行一样的配置
5.在主库上创建,删除数据库,在丛库上查找

3.实现mysql读写分离

3.1 安装mycat2软件

一.yum list | grep "jdk" java-1.8.0-openjdk.x86_64
1.使用xftp将jdk下载到家目录
2.使用yum install安装
[root@localhost ~]# yum localinstall -y jdk-8u261-linux-x64.rpm
3.查看是否下载好了java
[root@localhost ~]# java -version
1)安装程序包:http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
2)jar包:http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar

二.1.创建/data目录
[root@localhost ~]# mkdir /data
2.安装解压工具
[root@localhost ~]# yum install -y unzip
3.先解压mycat2-install-template-1.21.zip
[root@localhost ~]# unzip mycat2-install-template-1.21.zip -d /data
4.将mycat2-1.21-release-jar-with-dependencies.jar
移动到/data/mycat/lib/目录下
[root@localhost ~]# mv mycat2-1.21-release-jar-with-dependencies.jar /data/mycat/lib/
[root@localhost mycat]# ll
total 8
drwxr-xr-x. 2 root root 4096 Mar  5  2021 bin 	执行操作
drwxr-xr-x. 9 root root  275 Mar  5  2021 conf 	配置文件
drwxr-xr-x. 2 root root 4096 Mar 26 17:55 lib	第三方的库,jar包就在这里
drwxr-xr-x. 2 root root    6 Mar  5  2021 logs	日志文件
5.给/data/mycat/bin/文件给予执行权限
[root@localhost mycat]# chmod +x bin/*


三.1.修改配置文件mycat/conf/datasources/prototypeDs.datasource.json
[root@localhost mycat]# vim /data/mychat/conf/datasources/prototypeDs.datasource.json
{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ_WRITE",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"prototypeDs",
	"password":"123456",
	"type":"JDBC",
	"url":"jdbc:mysql://localhost:3306?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
	"user":"root",
	"weight":0
}
四.1.查看mycat状态
[root@localhost mycat]# cd ./bin/
[root@localhost bin]# ./mycat status
mycat2 is not running.
2.启动mycat
[root@localhost bin]# ./mycat start
Starting mycat2...
	"password":"123456",


3.2 使用docker配置一主2从

3.3 创建数据源

在mycat上输入
配置读写数据源
/*+ mycat:createDataSource{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"m1",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://127.0.0.1:3307/db1?
useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
"user":"root",
"weight":0
} */;

配置两个从库只读数据源
/*+ mycat:createDataSource{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"m1s1",
"password":"123456",
"type":"JDBC",
"url":"jdbc:mysql://127.0.0.1:3308/db1?
useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
"user":"root",
"weight":0
} */;

3.4创建集群

在mycat
/*! mycat:createCluster{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"m1"
],
"maxCon":2000,
"name":"prototype",
"readBalanceType":"BALANCE_ALL",
"replicas":[
"m1s1","m1s2"
],
"switchType":"SWITCH"
} */;

3.5创建逻辑库

在mycat中创建逻辑库
CREATE DATABASE db1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3.6修改逻辑库的数据源

[root@node4 mysqlms]# cat /data/mycat/conf/schemas/db1.schema.json
{
"customTables":{},
"globalTables":{},
"normalProcedures":{},
"normalTables":{},
"schemaName":"db1",
"shardingTables":{},
"targetName":"prototype",
"views":{}
}

3.7测试读写分离是否成功

重启mycat

[root@node4 mysqlms]# cd /data/mycat/bin/
[root@node4 bin]# ./mycat restart

3.8测试

在mycat里创建一个表并且插入数据,分别在mysq2,mysql3中查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值