mysql主从利用proxy实现读写分离

MySQL主从可以实现MySQL的读写分离,master上进行写操作,同步数据库,slave上进行读操作,可以极大的提升性能,降低服务器负载,下面来做主从配置详解!

环境:
centos 7 192.168.1.1 atlas代理服务
centos 7 192.168.1.2 主Mysql数据库
centos 7 192.168.1.3 从Mysql数据库

1.三台机器都安装centos7
2.相互ping通,并关闭防火墙(测试)
3.主从服务器都安装mysql 5.6

主从服务器MySQL安装

  1. 下载yum的repo源并安装,执行安装后,在/etc/yum.repos.d/这个目录下多出mysql-community-source.repo和mysql-community.repo:
    Centos7:
    wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
    rpm -ivh mysql-community-release-el7-5.noarch.rpm

2.先查看机器是否默认已安装过mysql。
yum repolist all | grep mysql
如果有记得删除再安装。

3.安装mysql服务
yum install mysql-community-server -y

4.设置开机启动并启动服务
systemctl enable mysqld
systemctl start mysqld

主从数据库的配置

1.首先进入主的mysql数据库中,创建用户saybot,密码123456.
mysql> grant all on . to saybot@'%' identified by "123456";

2.修改saybot的访问权限
进入数据库
use mysql;
修改权限%
update user set host = '%' where user = 'saybot';
查看权限是否成功。可以看到,saybot的用户,host已经修改成百分号了。
select user, host from user;
更新数据库信息。
flush privileges;

3.主从MySQL都需要创建一个数据库,我这创建的数据库是redmine
create database redmine;

【主意:主数据库与从的数据库同样配置, 记得要创建同样的数据库哦】

修改主从服务器的配置文件

配置主服务器的配置文件(新增如下配置。)
vi /etc/my.conf
#主从复制配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#需要备份的数据库
binlog-do-db=test
#不需要备份的数据库
binlog-ignore-db=mysql
#启动二进制文件
log-bin=mysql-bin
#服务器ID
server-id=1
【主意:若没有配置binlog-do-db和binlog_ignore_db,表示备份全部数据库。】

重启服务
systemctl restart mysqld

进入数据库配置主从复制的权限
grant replication slave on . to 'saybot'@'%' identified by '123456';

锁定数据库
flush tables with read lock;

查看主数据库信息,记住下面的“File”与“Position”的信息,它们是用来配置从数据库的关键信息。
show master status;
注意:在配置主从同步的时候会用到这个里面的信息。

配置从服务器
1.修改配置添加如下
vi /etc/my.cnf
server-id=2

  1. 进入数据库
    mysql -uroot -p

mysql> change master to master_host='192.168.1.1',
-> master_user='saybot',
-> master_password='123456',
-> master_port=3306,
-> master_log_file='mysql-bin.000002',
-> master_log_pos=328,
-> master_connect_retry=10;
Query OK, 0 rows affected (0.01 sec)
注意:file和log_pos是主mysql的信息。

启动服务
start slave;

检查主从复制状态,要看到下列标红的信息中,两个都是Yes,才说明主从连接正确,如果有一个是No,需要重新确定刚才记录的日志信息,停掉“stop slave”重新进行配置主从连接。
show slave status \G;

注意:如果在配置主动数据库同步的时候,主库里面有很多数据的话,需要从主库里面将数据导出,然后再倒入到从库里面。保持数据一致。
可以参考如下数据库导出和导入:
mysqldump -uroot -p111111 -R -E --triggers --single-transaction --master-data=2 --hex-blob --opt --databases xxxxxx >/tmp/xxxx.sql

mysql -uroot -p111111 </tmp/xxxx.sql

编译安装代理服务

安装依赖
yum update -y nss curl libcurl
yum group install "Development tools"
yum install gcc make libcurl-devel openssl-devel gmp-devel tar libffi-devel gettext-devel -y
yum install -y tcpdump net-tools jemalloc-devel libevent-devel glib2-devel lua-devel lua mysql-devel git
#yum install glib2
#yum install jemalloc

cd /opt && git clone https://github.com/Qihoo360/Atlas
cd Atlas

需要先修改源代码
vim /opt/Atlas/src/network-conn-pool-lua.c
220行:char tmp[] = {to_write - 4, 0, 0, 1, 0x85这行代码
将0x85修改成0x87之后,保存退出

./bootstrap.sh
make clean
make && make install

配置项添加或变更这几项:
daemon=true
event-threads=2
charset=utf8mb4
sql-log=ON
max_conn_for_a_backend=0
wait-timeout=60

编辑配置文件vi /usr/local/mysql-proxy/conf/config.cnf

[mysql-proxy]
admin-username=admin ###管理接口的用户名
admin-password=admin123 ###管理接口的密码
#admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
log-level=debug ####日志级别
log-path=./log #####日志路径
#plugin-dir=./lib
event-threads=2 ##工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
instance=config ####配置文件的名字
proxy-address=0.0.0.0:1234 #Atlas监听的工作接口IP和端口
admin-address=0.0.0.0:2345 #Atlas监听的管理接口IP和端口

####Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses=192.168.50.199:3306

###Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses=192.168.0.206:3306

###用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds=saybot:Ze2h****

daemon=true #####设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格
keepalive=true ####设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。

charset=utf8mb4 ###默认字符集
sql-log=ON ###########日志开关,
max_conn_for_a_backend=0
wait-timeout=60

配置完成后启动服务
cd /usr/local/mysql-proxy/bin/ ####进入启动文件目录
./mysql-proxyd config start ####启动服务

主从通过代理实现读写分离,在调用的时候可以直接用代理的ip,并使用代理的端口1234即可。

参考文章
https://www.cnblogs.com/yyhh/p/5084844.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值