转载地址:/mailfile/1272623
MySQL是开源的关系型数据库系统。
复制(Replication)是从一台MySQL数据库服务器(主服务器master)复制数据到另一个服务器(从服务器slave)的一个进程
MySQL Proxy有一项强大功能是实现“读写分离”,基本原理是让主数据库处理写方面事务,让从库处理SELECT查询。
实验环境
CentOS6.8_x64
mysql_master 192.168.1.109
mysql_slave 192.168.1.111
mysql_proxy 192.168.1.117
实验软件
mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
软件安装
sed -i 's/^mirrorlist=https/mirrorlist=http/' /etc/yum.repos.d/*.repo
yum clean all
yum install -y mysql mysql-libs mysql-server lua
service mysqld restart
mysqladmin -uroot password 数据库密码
mysql --version
mysql Ver 14.14 Distrib 5.1.73
mysql -uroot -p 数据库密码
mysql>以上操作master slave端都是一致
cp /etc/f /etc/f.bak
[mysqld]
server-id=1master端配置
log-bin=mysql-bin master/slave端配置
service mysqld restart
cp /etc/f /etc/f.bak
scp /etc/f root@192.168.1.111:/etc/f
sed -i "s/server_id = 1/server_id = 2/g" /etc/f
service mysqld restartslave端配置
mysql -uroot -p
mysql> grant replication slave on *.* to 'root'@'192.168.1.111' identified by '123456'; 192.168.1.111为slave ip
mysql> grant all on *.* to 'proxy'@'192.168.10.181' identified by '';创建proxy共享账号
mysql> flush privileges;
mysql> show master status;
|mysql-bin.000001| 323| master端操作
mysql -uroot -p slave端操作
mysql> stop slave;
mysql> reset slave;
mysql> change master to
-> master_host='192.168.1.109', master端ip
-> master_user='root', master端数据库用户名
-> master_password='123456',master端数据库密码
-> master_log_file='mysql-bin.000001',
-> master_log_pos=323; 这两个文件按照master端实际情况而定,次操作为slave端
mysql> start slave;
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes 这两行一定要是yes才可以实现主从复制
netstat -tuplna | grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:*LISTEN 22233/mysqld
tcp 0 0 192.168.1.109:3306192.168.1.111:41406ESTABLISHED 22233/mysqld
测试主从同步
mysql> create database test_1 master端操作
mysql> show databases;
|test_1| master端
mysql> show databases;
|test_1| slave端
tar zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
mkdir -p /usr/local/mysql-proxy/lua
mkdir -p /usr/local/mysql-proxy/logs
touch /usr/local/mysql-proxy/logs/mysql-proxy.log
cp /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua /etc/lua
cp /usr/local/mysql-proxy/share/doc/mysql-proxy/admin-sql.lua /etc/lua
cp -p /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua /usr/local/mysql-proxy/lua/
cp -p /usr/local/mysql-proxy/share/doc/mysql-proxy/admin-sql.lua /usr/local/mysql-proxy/lua/
vim /etc/mysql-f 默认没有配置文件需要手动创建
[mysql-proxy]
user=root运行mysql-proxy用户
admin-username=proxy 主从mysql共享用户
admin-password= mysql共享用户密码
proxy-address=192.168.1.117:4040 mysql-proxy server ip 端口号默认4040
proxy-read-only-backend-addresses=192.168.1.111 mysql_slave端 ip
proxy-backend-addresses=192.168.1.109 mysql_master端ip
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua 指定读写分离脚本位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua 指定管理脚本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log 指定日志文件位置
log-level=info log日志级别,由高到低分别有(error|warning|info|message|debug)
daemon=true 以守护进程方式运行
keeplive=true mysql-proxy崩溃时,尝试重启
chmod 660 /etc/mysql-f
chown -R root:root /usr/local/mysql-proxy/
cp -p /usr/local/mysql-proxy/lua/rw-splitting.lua /usr/local/mysql-proxy/lua/rw-splitting.lua.bak
sed -i "s/min_idle_connections = 4,/min_idle_connections = 1,/g" /usr/local/mysql-proxy/lua/rw-splitting.lua
sed -i "s/max_idle_connections = 8,/max_idle_connections = 1,/g" /usr/local/mysql-proxy/lua/rw-splitting.lua
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-f &
killall -9 mysql-proxy
netstat -tuplna | grep 4040
tcp 0 0 192.168.10.181:40400.0.0.0:*LISTEN 47402/mysql-proxy
tail -f /usr/local/mysql-proxy/logs/mysql-proxy.log
-01-22 11:02:24: (critical) plugin proxy 0.8.5 started
-01-22 11:02:24: (message) proxy listening on port 192.168.1.117.:4040
-01-22 11:02:24: (message) added read/write backend: 192.168.1.111
-01-22 11:02:24: (message) added read-only backend: 192.168.10.109
mysql -uproxy -h192.168.1.109 -p4040 - proxy代理服务器用户名 -h master_mysql ip -p proxy密码,测试如果可以连接说明配置成功
root用户用于实验,生产环境不可做此操作。如果有3-5台mysql可以使用MHAmysql高可用解决方案