第三块:测试MySQL-proxy读写功能
1:客户端测试写功能:
[root@linuxidc61 ~]# mysql -u user1 -p123456 -P4040 -h 192.168.1.6:62
mysql> use db;
#select * from test;的时候,看到了6363,表示mysql-proxy将查看请求连接到linuxidc63。mysql-proxy指定了linuxidc63只具有写的功能,所以当你插入一天新的数据的时候,你就会查看到你所插入的内容。注:出现的第一次数据都是只写的数据,不会是read-only的。
2:客户端测试读功能:再打开一个客户端测试一下读。
[root@linuxidc61~]# mysql -uuser1 -p123456 -P4040 -h 192.168.1.62
mysql> use db;
#这里elect * from test;的时候,看到了44,表示mysql-proxy将查看请求连接到linuxidc64。
mysql> insert into test values(6363);
mysql> select * from test; #现在是读的动作,看不到63数据的。
#mysql-proxy指定了linuxidc64只具有读的功能,所以当你插入一个新的数据的时候,你再次查看的时候还是6464,说明你的数据是写不进去的。
3:客户端登录查看:
[root@linuxidc61~]# mysql –uuser1 -p123456 -P4040 -h 192.168.1.62
mysql> show processlist;
列名称
作用
id
服务的一个标识
user
显示当前用户,如果不是 root ,这个命令就只显示你权限范围内的 sql 语 句。
host
显示这个语句是从哪个 ip 的哪 个端口上发出的。可以用来追踪出问题语句的用户。
db
显示这个进程目前连接的是哪个数据库。
command
显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。
time
显示这个进程目前连接的是哪个数据库。
state
显示使用当前连接的sql语句的状态,很重要的列,state只是语句执行中的某一个状态,一个sql语句,以查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成。
info
显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。
2:mysql+proxy+mysql主从实现读写分离
1:linuxidc63作为mysql主:
[root@linuxidc63 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin=mysqllog
server-id=1
binlog-do-db=db
[root@linuxidc63~]# mysql
mysql> grant all on *.* to user2@'%' identified by '123456';#创建一个主从同步用户
mysql>use db;
mysql>drop table test;#为了保持数据完整性,删除删一个表。
[root@linuxidc63~]# service mysqld restart
2:linuxidc64 mysql 从配置
[root@linuxidc64 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id=2
master-host=192.168.1.63
master-user=user2
master-password=123456
[root@linuxidc64~]# mysql
mysql> grant all on *.* to user2@'%' identified by '123456';# 创建一个主从同步用户
mysql>use db;
mysql>drop table test;#为了保持数据完整性,删除删一个表。
[root@linuxidc64 ~]# service mysqld restart
3:测试主从同步:
1)linuxidc63服务器测试同步数据:
[root@linuxidc63 ~]# mysql
mysql> use db;
mysql> create table test (id int );
mysql> insert into test values(63);
2)登录linuxidc64查看63同步过来的数据:
[root@linuxidc64 ~]# mysql
mysql> use db;
4:客户端linuxidc61:测试使用mysql-proxy 能否读到同样的数据。
分析:在客户端上利用普通MySQL用户从mysql-proxy上登录,然后插入数据,看看MySQL的主从上是否显示。
[root@linuxidc61~]# mysql -uuser2 -p123456 -P4040 -h192.168.1.62
mysql>use db;
mysql> select * from test;#可以查看到test中的63记录,说明mysql+proxy+主从读写分离成功。
mysql> insert into test values(64);
[root@linuxidc63 ~]# mysql
mysql> use db;
#在linuxidc62上登录的mysql数据库中,写的数据也得到了同步。
思考:当slave宕机后,mysql-proxy是如何读取的?
[root@linuxidc64 ~]# service mysqld stop
Stopping mysqld: [ OK ]
linuxidc62上测试:读写:
[root@linuxidc62 ~]# mysql -uuser2 -p123456 -P4040 -h192.168.1.62
mysql> use db;
mysql> insert into test values(6464);
linuxidc63上查看xuegod64关闭后的客户端连接:确认读和写都是访问linuxidc63
[root@linuxidc63~]# mysql
mysql> use db;
mysql> show processlist;
+----+-------+--------------------+------+-------------+------+-------------------------------------
总结:当停止掉slave数据库,proxy的查询就会转移到master上,当把slave启动后,proxy依然在读master,当有新的链接进来的时候才会重新去读取slave的数据。有时可能需要重启下mysql-proxy