mysql主从同步加读写分离

首先主从同步,一旦建立,指定了用户,就不能更改了,否则会有错误。1063

Error 'Duplicate entry '%-test-' for key 'PRIMARY'' on query. Default database: 'mysql'. Query: 'INSERT INTO db SELECT *

还没有找到好的解决办法。

 

因此要还原成2台机器刚刚装好mysql时候的快照来做实验。

主机只修改了下面的名字。

[root@ygy130 ~]# vim /etc/my.cnf 

log-bin=mysql-bin-master

重启

[root@ygy130 ~]# mysql -usystem -p123456

mysql> grant all on *.* to user2@'%' identified by '123456';

mysql> flush privileges;

 

从机

[root@yu131 ~]# vim /etc/my.cnf 

server-id       = 2

重启

[root@yu131 ~]# mysql -usystem -p123456

mysql> change master to master_host='192.168.31.130',master_user='user2',master_password='123456';

mysql> start slave;

mysql> show slave statusG

mysql主从同步加读写分离

主从同步配置完成。

 

下面开始做读写分离

mysql主从同步加读写分离

实验环境:

mysql-proxy服务端:     yu236            IP:192.168.31.236

mysql服务器(主,负责写)服务端:ygy130   IP:192.168.31.130

mysql服务器(从,负责读)客户端:yu131    IP:192.168.31.131

 

下面配置yu236主机:

关闭mysqld服务。

[root@yu236 ~]# service mysqld stop
[root@yu236 ~]# chkconfig mysqld off

[root@yu236 ~]# yum install lua

[root@yu236 ~]# tar -xf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/

名字太长,改短一下

[root@yu236 ~]# cd /usr/local/

[root@yu236 ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy

配置环境变量。

[root@yu236 local]# vim /etc/profile

export PATH=/usr/local/mysql/bin:$PATH
export PATH=/usr/local/mysql-proxy/bin:$PATH

[root@yu236 local]# source /etc/profile

 

配置读写分离

[root@yu236 local]# ls /usr/local/mysql-proxy/share/doc/mysql-proxy/

 mysql主从同步加读写分离

[root@yu236 local]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

修改
40 min_idle_connections = 4,
41 max_idle_connections = 8,

mysql主从同步加读写分离

#修改默认连接,进行快速测试,默认最小4个以上的客户端连接才会实现读写分离,最大链接数为8

注:为了验证试验效果将他改成1 .就是当有一个链接的时候,就实现读写分离的功能。为了清晰的看到读写分离的效果,需要暂时关闭MySQL主从复制功能。

 

 

注册账号user1供yu236访问。

[root@ygy130 ~]# mysql -usystem -p123456

mysql> grant all on db.* to user1@'%'  identified by '123456' ;

mysql> flush privileges;

 

[root@yu131 ~]# mysql -usystem -p123456

mysql> grant all on db.* to user1@'%'  identified by '123456' ;

mysql> flush privileges;

 

启动服务mysql-proxy服务

[root@yu236 local]# mysql-proxy --proxy-read-only-backend-addresses=192.168.31.131:3306 --proxy-backend-addresses=192.168.31.130:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua &

 

参数说明:
--proxy-read-only-backend-addresses=192.168.31.131:3306 # 定义后端只读服务器
--proxy-backend-addresses=192.168.31.130:3306 #定义后端mysql主服务器地址,指定mysql写主服务器的端口
--proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua & #指定lua脚本,在这里,使用的是rw-splitting脚本,用于读写分离
当有多个只读服务器时,可以写多个以下参数:
--proxy-read-only-backend-addresses=192.168.31.64:3306 # 定义后端只读服务器
--proxy-read-only-backend-addresses=192.168.31.65:3306 # 定义后端只读服务器
#--proxy-address=192.168.31.236:3307 指定mysql proxy的监听端口,默认为:4040

[root@yu236 local]# lsof -i :4040
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysql-pro 2040 root 9u IPv4 13618 0t0 TCP *:yo-main (LISTEN)
You have new mail in /var/spool/mail/root

 

 

验证阶段

随便使用一天机器,远程登陆yu236,通过代理连接数据库。

[root@ygy130 ~]# mysql -uuser1 -p123456 -P4040 -h192.168.31.236

看一下有什么库。

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db |
+--------------------+
2 rows in set (0.00 sec)

进入db库

mysql> use db
Database changed

看一下有什么表
mysql> show tables;
Empty set (0.00 sec)

创建一个表。

mysql> create table test(id int);

插入数据

mysql>  insert into test values(1);

mysql>  insert into test values(2);

查看数据。

mysql> select * from test;
+------+
| id |
+------+
| 1 |
| 2 |

 

 

使用本地登录130和131

mysql> use db

mysql> select * from test;

+------+
| id |
+------+
| 1 |
| 2 |
+------+

成功。

 

原文链接: https://www.cnblogs.com/yuguangyuan/p/5990006.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    mysql主从同步加读写分离

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/397918

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月11日 上午9:50
下一篇 2023年4月11日 上午9:50

相关推荐