mysql读写分离策略

mysql作读写分离有两个步骤:第一步为mysql配置主从复制;第二步用mysql-proxymysql作读写分离。mysql

 

mysql主从复制

为了保证mysql主从复制搭建成功,最好保证两台机器上mysql的版本一致。 在mysql中输入以下命令查看版本信息。linux

select version();

我使用的两台mysql地址分别为192.168.10.42192.168.10.49。42上的mysql做为master使用,49上的mysql做为slave使用。sql

主数据库配置

登陆192.168.10.42,找到mysql的配置文件my.cnf。打开my.cnf[mysqld]下面加入以下内容数据库

log-slow-queries=mysql-slow.log
log-error=mysql.err
log-bin=mysql-bin
server-id=1

上面的配置主要是为了开启主数据库的二进制日志功能,在添加时最好先浏览一下my.cnf这个文件,由于有的属性可能已经存在了。添加完成后保存退出,而后重启mysql。ubuntu

 

service mysqld restart

 

mysql重启完成后,以root登陆进去,给从数据库分配主数据库的复制权限,命令以下tcp

 

grant replication slave on *.* to 'user'@'192.168.10.49' identified by `password`;

 

其中“*.*”表示从数据库可以复制主数据库上的哪些库和哪些表,“user”和“password”是主数据库分配给从数据库的用户名和密码,根据需求本身设定,这里仅做示例使用。设置从数据库时要用到这个用户名和密码。ide

 

权限分配后输入以下命令能够查看到刚才设置的用户名,密码和ip地址信息。测试

 

select host,user,password from mysql.user;

 

而后查看一下主数据库的状态信息,输入以下命令lua

show master status;

记住其中的FilePosition字段的值,配置从数据库时会使用到。spa

 

从数据库配置

 

登陆到191.168.10.49,找到mysql的配置文件my.cnf,在[mysqld]下面加入以下内容

log-slow-queries=mysql-slow.log
log-error=mysql.err
log-bin=mysql-bin
server-id=10

添加前最好浏览下这个文件的原有配置,若是已经配置够就不用再配置了。保存退出后,重启mysql服务

 

service mysqld restart

 

测试从数据库是否能用主数据分配的用户名和密码登陆到主数据库。

mysql -uuser -ppassword -h192.168.10.42

若是不能登陆,先检查一下可否ping通。若是可以ping桶,再检查一下192.168.10.42上的防火墙是否配置了3306端口。没有,则在iptables中添加3306端口的放行策略,而后重启iptables

 

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

 

重启iptables

 

service iptables restart

 

这样,应该就能够登录到主数据库了。

root登陆从数据库,配置slave信息

 

change master to master_host='192.168.10.42', master_user='user' , master_password='password', master_log_file='mysql-bin.000005', master_log_pos=3065;

 

而后开启从数据库的slave状态。

 

slave start;

 

查看slave信息。

 

show slave status\G;

 

若是Slave_IO_Running与Slave_SQL_Running为YES,则slave状态开启成功。不然,根据mysqld.log日志查看具体缘由。

到此,mysql的主从复制就设置好了。在主数据库上添加删除几条数据,能够在从数据库上一样的操做。停掉从数据库的slave状态

 

slave stop;

 

再往主数据库中添加删除数据,这些操做就不会影响到从数据库了。

mysql作读写分离功能

 

mysql的读写分离,使用mysql-proxy来实现。而mysql-proxy而依托lua脚本,因此机器上密码安装lua

 

安装mysql-proxy的机器为192.168.29.132

 

操做系统为ubuntu14.1

 

mysql-proxy的版本为mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz

 

由于咱们使用的是ubuntu因此安装lua的方式就很简单了。

 

apt-get install lua

 

能够根据本身的系统选择相应的方式安装lua,保证lua命令可以执行就能够了。mysql-proxy的版本也要根据本身的操做系统进行相应的选择。

 

mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz上传到/home/mysql_proxy目录下,解压

 

tar zxvf mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit.tar.gz
cd mysql-proxy-0.8.2-linux-glibc2.3-x86-64bit
cp share/doc/mysql-proxy/rw-splitting.lua ./
vi rw-splitting.lua

 

找到以下片断

if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 4,
                max_idle_connections = 8,

                is_debug = false
        }
end

为测试使用把48改成1。在生产环境中根据需求可作相应的修改。修改后以下图

 

如今就能够启动mysql-proxy了,命令以下

 

./bin/mysql-proxy --proxy-read-only-backend-addresses=192.168.10.49:3306 --proxy-backend-addresses=192.168.10.42:3306 --proxy-lua-script=rw-splitting.lua

 

控制台没有错误输出则启动正常。

mysql-proxy的侦听端口为4040,因此在192.168.29.132这台机器上要开放4040端口。在iptables文件中添加以下内容

 

-A INPUT -p tcp -m state --state NEW -m tcp --dport 4040 -j ACCEPT

 

重启iptables

 

service iptables restart

 

输入以下命令,能够查看端口侦听情况。

netstat -anp | grep 4040

因为mysql-proxy架设在192.168.29.132这台机器上,还须要在主数据库中配置这台机器的权限,命令以下。

 

grant all on *.* to 'user'@'192.168.29.132' identified by 'password';

 

如今mysql读写分离就完成了,结构图以下

 

应用程序链接到mysql-proxy上,全部的写请求经过红线发送到master mysql上,全部的读请求经过蓝线发送到slave mysql上,masterslave之间经过紫线同步数据。

如今就能够测试读写分离机制是否起做用了。经过以下命令链接到mysql-proxy上。而后停掉192.168.10.49上的slave状态。

 

mysql -uuser -ppassword -h192.168.29.132 -P4040

 

mysql-proxy上,经过sql插入几条数据。能够看到42上的mysql中有新增的数据,49上的mysql没有新增数据。而后在mysql-proxyselect一下,能够看到选出来的结构没有刚才插入的几条数据。

至此,mysql的读写分离就完成了。

相关文章
相关标签/搜索