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

使用代理软件mysql-proxy实现mysql的读写分离
实验:
172.16.1.10
客户端请求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.grant replication slave on *.* to 'slave'@'172.16.1.10' identified by 'king123'; 授权,指定从服务器只能复制binlog,从服务器的ip
mysql>show master status查看主服务器的运行状态
      
在从上使用slave用户登录测试:
3.mysql -u slave -p123 -h 192.168.1.14
4.mysqldump --all-database > db_backup.sql (主服务执行全备)
5.mysql> show master status;找到当前的日志文件和位置号

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

8.从服务器从主服务器读取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=更新版本号;

9.启动从服务器
mysql> slave start  或者是start slave,启动从服务器
mysql>show slave status 查看从服务器状态


你可能感兴趣的:(apache,mysql,mysql-proxy)