*本文档服务器默认选择centos 7.0 mysql5.6 mysql-proxy0.8.5
主机服务器:192.168.162.195
从机服务器:192.168.162.197
代理服务器:192.168.162.198
一、主从配置
1、 分别在主机服务器和从机服务器安装mysql。分别配置成服务(详见mysql服务配置)。
2、 在主机设置:
A. systemctl status mysqld查看mysql运行状态。
B. 打开mysql的配置文件 vi /etc/my.cnf 如下显示:
在mysqld空白处添加以下设置
server-id=100 #主机服务器id
log-bin=mysql-bin #log日志存储文件
binlog-format=mixed
修改后如下显示:
C. 重启mysql。
Systemctl restart mysql;
D. 进入mysql。
Mysql –uroot –proot;
创建从库用户及权限:代码如下
创建用户,用户名为(repl,可以自己随便写)create user repl;
赋予权限Grant Replication Slave On *.* To ‘repl’@’192.168.%.%’ Identified By '123456';
By后面为你设置的密码,可以自己随便设置。@后面是你赋予权限的ip地址
显示下设置有没有成功,Select user,host From mysql.user如下:
表示设置从库用户成功。
E. 显示主库的运行状态,show master status\G;如下:
*记住红框内的file文件
3、 在从机中设置:
A. 在命令行尝试以复制用户repl连接主库中的mysql;
Mysql –urepl –p123456 –h192.168.162.195;
如果报以下错误:ERROR 2003 (HY000): Can't connect to MySQL server on
'192.168.162.195' (113),请检查主机中的防火墙设置。
B. 修改配置文件,vi /etc/my.cnf 如下:
并,重启mysql服务(systemctl restart mysql)。
C. 进入从机中的mysql;mysql –uroot -proot
D. 设置所要连接主库的连接信息
Change master to master_host=’192.168.162.195’,//主机ip
Master_port=3306,//主机mysql 端口号
Master_password=’300222’,//主机设置的密码
Master_user=’repl’,//主机设置的从库用户
Master_log_file=’log_bin.000003’,//主机中show master status中的file文件
Master_log_pos=0;
E. 启动从库start slave;
*可能会报错:ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository。解决方案,reset slave all.重复步骤D即可。
F.查看从库状态,show slave status\G;如下显示:
如果发现IO_RUNNINT:YES,SQL_RUNNING:YES.表示配置成功。如果不成功则去看后面报的错误是什么,然后度娘。
二、mysql proxy实现mysql的读写分离
进入cd /opt/install
1、安装必要的指令
yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig* libevent* glib* readline-devel
2、安装lua运行环境。
下载wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
解压相对应的lua :tar –zxvf lua.*
进入lua: cd lua*
Make linux(如果出现lua.c:67:31: fatal error: readline/readline.h: No such file or directory)说明缺少依赖的包:yum install –y libreadline-dev
Make install
设置环境变量:
export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"
3、下载mysql-proxy 对应到响应的服务器配置。到官网下载
解压mysql-proxy 到 /opt/mysql-proxy目录下。
进入/opt/mysql-proxy下
创建脚本目录 mkdir lua
创建日志目录 mkdir log
cp share/doc/mysql-proxy/rw-splitting.lua ./lua
cp share/doc/mysql-proxy/admin-sql ./lua
创建配置文件:vi /etc/mysql-proxy.cnf
[mysql-proxy]
user=root
admin-username=proxy
admin-password=300222
proxy-address=192.168.162.198:4001
proxy-read-only-backend-addresses=192.168.162.197:3306
proxy-backend-addresses=192.168.162.195:3306
proxy-lua-script=/opt/mysql-proxy/lua/rw-splitting.lua
admin-lua-script=/opt/mysql-proxy/lua/admin-sql.lua
log-file=/opt/mysql-proxy/log/mysql-proxy.log
设置权限:chmod 660 /etc/mysql-proxy.cnf
修改配置文件
vim /usr/local/mysql-proxy/lua/rw-splitting.lua
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 1, #默认8,改为1
is_debug = false
}
End
配置mysql-proxy成为服务:
[Unit]
[Install]
Alias=mysql-proxy.service
[Service]
User=root
Group=root
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables etc.
#ExecStartPre=/opt/mysql-proxy/bin/mysql-proxy-systemd-start pre
# Start main service
ExecStart=/opt/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
# Don't signal startup success before a ping works
#ExecStartPost=/opt/mysql-proxy/bin/mysql-proxy-systemd-start post
# Give up if ping don't get an answer
TimeoutSec=600
Restart=always
PrivateTmp=false
完成配置。
4、 测试。
到主机上授权代理用户使用权限
grant on *.* To ‘proxy’@’192.168.162.198’ Identified By ‘300222’;
第一步,到从机中验证是否有该权限:
select user,host from mysql.user;
第二步,到代理服务器上,分别测试是否能够访问主机和从机:
Mysql –uproxy –h192.168.162.195 –p300222;
Mysql –uproxy –h192.168.162.197 –p300222;
登录代理客户端:
mysql –uproxy -h192.168.162.198 –P4001 –p300376
Create database litest;
Use lit;
Create table tbUser(Id Int unsigned auto_Increment,name varchar(20),age Int);
Insert into tbUser(name,age) values(“lisi”,20);
然后进入从机,
关闭slave;
stop slave;
再进入代理;
select * from litest.tbUser;为null;