记录一次Mysql主从与Mysql-Proxy读写分离配置
记录一次Mysql主从与Mysql-Proxy读写分离配置
首先环境如下
IP | 类型 |
---|---|
10.255.0.1 | Master |
10.255.0.2 | Slave |
10.255.0.3 | Proxy |
目前208上已经运行一个业务Mysql,并且大约有20G左右的数据量,因为读写效率低下的问题,所以加了一台新的机器做读写分离。
配置修改
首先要对俩台mysql的配置文件进行修改,分别要设置server-id
Master在原有配置上增加配置,一些需要优化的参数可以自己调整,比如选用mixed还是row等模式
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id
binlog-do-db = jd # 需要同步的数据库
Slave增加一行
[mysqld]
server-id=2 #设置server-id
默认my.cnf可能会默认设置一个server-id,需要找到并修改他
Master配置
导出数据
正常下数据导入是在Master机器上进行锁表,然后导出数据,然后在解锁;这里说另一种方法,就是导出的时候增加--master-data=2参数,这样在导出的文件中就会记录mysql-bin与pos参数的值。
mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -u root -p db > db.sql
存储的参数信息大致如下
--
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000307', MASTER_LOG_POS=120;
--
增加同步用户
#创建用户
CREATE USER 'repl'@'10.255.0.2' IDENTIFIED BY 'passwd';
#分配权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.255.0.2';
#刷新权限
flush privileges;
Slave配置
创建账户与数据库
首先需要创建一个同名数据库与master同名的账户密码,比如数据库的名字是db,用户是db密码是pass,需要创建一个完全相同的即可。
导入数据
mysql -u db -p db < db.sql
链接Master
CHANGE MASTER TO
MASTER_HOST='10.255.0.1',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000307', # 这里写导出的sql中的参数
MASTER_LOG_POS=120; # 这里写导出的sql中的参数
start slave; # 开启同步
然后执行一下
show slave status\G
看看是否有什么错误,如果一切正常,大概可以看到这样的输出
Mysql-Proxy配置
安装
wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
tar zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit.tar.gz
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
cd /usr/local/mysql-proxy
mkdir lua
mkdir logs
cp share/doc/mysql-proxy/rw-splitting.lua ./lua
cp share/doc/mysql-proxy/admin-sql.lua ./lua
配置文件
创建/etc/mysql-proxy.cnf文件,并写入
user=root
admin-username=db # 俩台机器相同的mysql账户密码
admin-password=123456
proxy-address=0.0.0.0:3306
proxy-read-only-backend-addresses=10.255.0.2:3306 # Slave机器
proxy-backend-addresses=10.255.0.1:3306 # Master机器
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
daemon=true
keepalive=true
实际使用时Mysql-proxy不支持注释,需要删除所有中文注释使用。
负载设置
打开/usr/local/mysql-proxy/lua/rw-splitting.lua文件
修改
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 2, //单机最小链接,默认4
max_idle_connections = 4, // 最大链接,默认8
is_debug = false
}
end
启动
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
结束
到这里就已经配置结束了,可以直接链接10.255.0.3这台机器,会根据你的读写语句自动切换到不同的机器,这样就可以不需要去修改任何业务代码实现读写分离了。