Mysql读写分离(mysql-proxy的安装和配置)
应用场景:
最适合多读少写的场景,而且是一主(负责写)多从(负责读,通过proxy分摊查询)
- 从服务器作为读的优点:可以设置为MYISAM,读取速度快,索引查相对也比Innodb快。还可以做集群分摊读的压力
- 主服务器负责写:Innodb支持事务和高并发的写,因为是行锁而不是表锁。
- 数据同步使用 binlog ,从库不需要像主库那样先对 SQL query 进行 SQL parsing 等操作,写入效率高。也不需要支持事务了,因为binlog都是事务控制后的结果了。
mysql-proxy
实现功能
实现mysql的代理,外部通过代理的形式访问mysql
安装配置
- mysql 和mysql-proxy是2个独立的软件,就算在一个机子上,也需要对本机授权。这和直接远程连接mysql是2个概念。
192.168.29.129为mysql-proxy的软件所在的机器的IP,可以和mysql在一台服务器上,也可以不在一台服务器上。
grant all on . to ‘test’@’192.168.29.129’ identified by ‘123456’;
flush privileges;
- 授权后,外部直接通过默认的4040端口,远程连接mysql 服务器
mysql -hmysql-proxyIP -P4040 -u$USER -P密码
可以测试 telnet mysql-proxyIP 4040 查看是否防火墙屏蔽了端口。
安装参考:
https://www.cnblogs.com/hjwq/p/6293507.html
概括:
源码安装:tar -zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gzcp -r mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxychmod -R 775 /usr/local/mysql-proxychown -R mysql:mysql /usr/local/mysql-proxyvim /etc/profile //打开此文件,在文件尾部加上以下内容LUA_PATH="/usr/local/mysql-proxy/share/doc/mysql-proxy/?.lua"export LUA_PATHexport PATH=$PATH:/usr/local/mysql-proxy/bin //mysql proxy 环境变量的设置保存并退出后执行下面命令source /etc/profile // 使变量立即生效启动mysql-proxy启动脚本 mysql-proxy.cnf
注意:这个配置文件一定不能有尾部空格啊。 配置的username是 mysql授权过的用户名和密码。[mysql-proxy]admin-username=testadmin-password=123456admin-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/admin-sql.luadaemon=truekeepalive=trueproxy-backend-addresses=192.168.29.129log-file=/usr/local/mysql-proxy/mysql-proxy.loglog-level=debug启动mysql-proxy
chmod 0660 /etc/mysql-proxy.cnf
mysql-proxy –defaults-file=/etc/mysql-proxy.cnf
proxy 读写分离的配置
- 分别把主、从服务器给mysql-proxy的 test/123456 赋予权限。
注意:主库和从库给代理服务器创建登录用户并密码应该一致
注意事项
mysql的远程连接
有问题参考博客:
http://blog.csdn.net/freezingxu/article/details/77088506
这和oracle不一样,需要专门的设置和授权。
登录主mysql:把test用户(密码123456)授权到192.168.29.129这个IP,享有所有的数据库资源
|
查看授权情况
select user,host from mysql.user;查看防火墙情况
telnet 192.168.29.129 3306ubutun操作系统的话,需要修改 /etc/mysql/mysql.conf.d/mysqld.cnf 这个配置。
注释掉 # bind-address = 127.0.0.1
然后切换到 192.168.29.129,就可以远程连接到主mysql了
mysql -h192.168.29.1 -utest -p123456
主从复制
非常棒的博客:操作成功了
https://www.cnblogs.com/superfat/p/5267449.html
重点注意事项:
- 配置连通状态
设置从服务器读取二进制日志的位置,要从master 读取 show master status;
获取到bin,和position,然后写入到从服务器中。
|
当从服务器显示: show slave status;
SLAVE_IO_RUNNING:YES;
SLAVE_SQL_RUNNING:YES;
的时候才表示主从连通。
- 初始化的时候一定要一样才行,因为不会自动一样,只是有新的事务进来,从服务器就开始同步新的DML
- 查看最大IO事务的大小:
select @@global.max_allowed_packet/1024/1024 MB;
设置为1个G
stop slave;
set global max_allowed_packet =110241024*1024;
start slave;
出现问题
mysql重启后第一次 主从复制成功,第二次主服务器更新,从服务器不更新,但是 show slave status; 显示正常。我ca