您的位置:首页 > 数据库 > MySQL

使用代理软件mysql-proxy实现mysql的读写分离

2016-01-13 13:59 781 查看
实验环境:
centos 6.4 x64
172.16.1.10
172.16.1.11
172.16.1.12

客户端请求mysql-proxy,判断是写还是读
建立两次连接
是远程连接,要授予远程连接的权限
>use
db;
>create table test (id int);
>insert into test values
(10),(100);
>grant all on db.* to proxy@'%' identified by
'123';

在打开一个终端设置从服务器和主服务器一样,只是值不一样
mysql
>create database
dn;
>use db
>create table test (id int);
>insert into test
values (10),(200);
>grant all on *.* to proxy@'%' identified by
'123';密码和主服务器必须一样

指定一个代理服务器;172.16.1.10 测试
mysql -h 172.16.1.11
-u proxy -p123
mysql -h 172.16.1.12 -u proxy
-p123
使用lva的脚本语言,把lva的解释起和lvadevell装上,day4里面有mysql-proxy
把两个包装上
rpm
mysql-proxy-0.8.0*.rpm
rpm -ivh lua-5.0.2-1.el5.rf.i386.rpm
rpm
-ivh lua-devel-5.0.2-1.el5.rf.i386.rpm
tar zxvf
mysql-proxy-0.8.0-linux-rhel5-x86-32bit.tar.gz -C /usr/local/src

cp -r
mysql-proxy-0.8.0-linux-rhel5-x86-32bit /usr/local/mysql-proxy

cd
/usr/local/mysql-proxy/share/doc/mysql-proxy
vim rw-splitting.lua
36 if
not proxy.global.config.rwsplit then
37 proxy.global.config.rwsplit =
{
38 min_idle_connections =
1, 最小空闲线程连接
39 max_idle_connections =
1, 最大线程连接,基本没用

mysqlproxy的启动方法
cd bin
./mysql-proxy
--help-proxy 查看帮助
mysql-proxy
--proxy-read-only-backend-addresses=172.16.1.12:3306
--proxy-backend-addresses=172.16.1.11:3306
--proxy-lua-script=/usr/share/doc/mysql-proxy/rw-splitting.lua --daemon
--user=nobody --log-level=debug
--log-use-syslog
-P 决定mysql用那个接口进行连接,指定mysql-proxy工作的时候允许访问的IP和接口模拟成mysql,端口用3306,要保证自己本地的mysql不要运行,打开后端口冲突,mysql-proxy运行不起来
-r 只读的后端服务器 172.16.1.12
-b 读写的后端服务器 172.16.1.11
-s 工作的时候指定脚本的位置和名称,默认是没有的
版本小于5.1.12,会出现bug,要加上-bug
--deamon 以一个服务的形式去启动
什么算服务:被定义为服务的进程是没有终端的,不依赖于用户的终端。终端关掉,服务还是可以正常运行的

运行mysql-proxy
/usr/local/proxy/bin/mysql-proxy
-P 172.16.1.10:3306 -b 172.16.1.11:3306 -r 17.16.1.12:3306 -s
/usr/local/proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon
&

改变:# ulimit -n 10240 临时改变,永久改变,要改PAM(ulimit -n
1
cat /etc/passwd
/etc/shadow 会出错)
测试:
模拟客户端,利用mysql命令往mysql-proxy发起连接
mysql
-h 192.168.1.15 -u proxy -p123
>use db;
>select * from
test;
>

另一个标签
mysql -h 192.168.1.15 -u proxy -p123

>use db;
>select * from test;
>
可以增大连接数目
>update
test set id=300; 改变数据
然后可以把140 14 搭建成主从的模式

ab复制(主从复制)

可以让mysql实现:
1.数据的备份(主服务器的数据全部同步到从服务器)
2.可以负载均衡减小主服务器的压力
3.真正实现mysql的读写分离

配置方法
主服务器:
1.cat
/etc/my.cnf
[mysqld]
log-bin=mysql_bin
server-id=1 不允许重复
2.授权,指定从服务器只能复制binlog,从服务器的ip
grant
replication slave on *.* to 'slave'@'172.16.1.10' identified by 'king123';
3.查看主服务器的运行状态
mysql>show master
status

5.在从上使用slave用户登录测试:
mysql -u slave -p123 -h
192.168.1.14
6.备份数据库(主服务执行全备)
mysqldump --all-database > db_backup.sql
7.找到当前的日志文件和位置号
mysql> show master
status;

8.从服务器设置:将主服务的全备脚本拷贝到主服务器并且导入主服务器
(可以不用开启binlog功能)
mysql -uroot -p123 <
db_backup.sqlb
9.cat
/etc/my.cnf
[mysqld]
server-id=2 #和主服务器不重复就可以
master-host=192.168.1.131 #主服务器ip
master-user=slave #登录时账号
master-password=123
mysql #读取配置文件时,知道是以从服务器的形式运行

10.从服务器从主服务器读取binlog产生问题时
mysql -u root
-p
mysql> change master to
mysql>
master_host='192.168.1.131',
mysql> master_user='slave',
mysql>
master_password='123',
mysql> master_log_file='主服务器日志文档',
mysql>
master_log_pos=更新版本号;

11.启动从服务器
mysql> slave start #或者是start
slave,启动从服务器
mysql>show slave status #查看从服务器状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  apache mysql mysql-p