centos 6.6 上mysql5.1主从同步 + 读写分离(mysql-proxy)基础实验

注意本次主从服务器上面均一yum安装mysql
主从安装mysql
shell> yum -y install mysql mysql-server mysql

/etc/init.d/mysqld start #初始化数据库,并启动数据库linux

主服务器上面
添加如下配置
server-id=1
log-bin=mysql-bin #这个必定得设置,不然没有日志的话,从数据库上会报错

[root@localhost etc]# service mysqld stop
Stopping mysqld: [ OK ]
[root@localhost etc]# service mysqld start
Starting mysqld: [ OK ]
[root@localhost etc]# service mysqld status
mysqld (pid 3129) is running...sql

建立主从复制的账号:
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@'192.168.137.197' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
若是该命令没法执行,请检查是否用了圆角的’,须要用半角的',再不行,那就是mysql数据库安装不成功。

192.168.137.197是从库的地址
backup是须要同步的用户名(有些博客说是数据库名称,坑人不倦)
123456为远程同步密码

解锁表

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)shell

正确的状态以下:
mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)数据库

配置错误的状况,解决办法见文章最后的疑难解答。
mysql> SHOW MASTER STATUS;
Empty set (0.00 sec)

修改从库配置:

[root@localhost ~]# vi /etc/my.cnf
添加语句
log-bin = mysql-bin
server_id = 2
master-host = 192.168.137.33
master-user = backup
master-pass = 123456
master-port = 3306
master-connect-retry = 60服务器

重启mysql /etc/init.d/mysqld restart

mysql> CHANGE MASTER TO
MASTER_HOST='192.168.137.33',
MASTER_USER='backup',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=106,
MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected (0.02 sec)
测试主从是否配置成功。
mysql> show slave status\G;tcp

#注意在slave上面检测 show slave status时要保证 一、 Slave_IO_State 和Slave_IO_Running 都是有状态的才算salve进程启动,后续才能进行主从操做。切记!

测试:新建表:
CREATE TABLE Persons
-> (
-> Id_P int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );

    mysql> desc Persons;

+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| Id_P | int(11) | YES | | NULL | |
| LastName | varchar(255) | YES | | NULL | |
| FirstName | varchar(255) | YES | | NULL | |
| Address | varchar(255) | YES | | NULL | |
| City | varchar(255) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)ide

从服务器上面mysql>desc Persons以后出现上述同样的结果则说明配置,主从同步成功。可是这个只是主服务器的文件变更以后同步到从服务器上面去了,从服务器的sql语句执行,没有影响到主服务器的变化,并无实现真正意义上的主从同步。请知悉!测试

*使用mysql-proxy 进行数据库读写分离实验*
    一、环境配置:
        master : 172.20.6.181 
        slave : 172.20.6.84
        已经配置好主从复制
        mysql > grant all privileges on *.* to 'root'@'%' identified by 'abc123';
        mysql > flush privileges;

2.安装mysql-proxy ,在另一台机器上安装lua

wget http://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy

3.配置mysql-proxy
cd mysql-proxy
mkdir lua #建立脚本存放目录
mkdir logs #建立日志目录
mkdir conf #放置配置文件
cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

四、执行脚本
/opt/mysql-proxy/bin/mysql-proxy \
--proxy-address=172.20.6.174:4040 \   #mysql-proxy安装部署的机器IP
--proxy-backend-addresses=172.20.6.181:3306 \  #在3306端口的服务器中配置可读可写
--proxy-read-only-backend-addresses=172.20.6.84:3306  \ #在3306端口的服务器中配置只读
--proxy-lua-script=/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua \  #用这个lua脚原本实现读写分离
--log-level=info \
--log-file=/opt/mysql-proxy/logs/mysql-proxy-12.log \ #这是它的日志
--daemon

五、启动完成后,检查进程
ps aux | grep mysql-proxy 

六、[root@rs-1 logs]# tailf mysql-proxy-12.log 
2018-06-12 16:47:03: (critical) plugin proxy 0.8.5 started
2018-06-12 16:47:03: (message) proxy listening on port 172.20.6.174:4040
2018-06-12 16:47:03: (message) added read/write backend: 172.20.6.181:3306
2018-06-12 16:47:03: (message) added read-only backend: 172.20.6.84:3306

配置完成,能够在另一台机器上面使用mysql命令进行测试

shell > mysql -uroot -predhat -h172.20.6.174 -P4040 #此处IP为mysq-proxy的IP进行测试。

注意,测试的时候,须要开启多台机器链接mysql-proxy进行测试。
这是由于 mysql-proxy 代理会检测客户端链接,当链接没有超过 min_idle_connections 预设值时,不会进行读写分离,即查询操做会发生到主库上。
而且看一下mysq-proxy进行启动时真正读取的配置文件的位置,切莫修改错了。

测试使用tcpdump进行测试:

在主和从上使用tcpdump进行抓包测试,
    [root@rs-1 log]# tcpdump -i eth1 -nn -XX ip dst 172.20.6.181 and tcp dst port 3306
    [root@rs-1 log]# tcpdump -i eth1 -nn -XX ip dst 172.20.6.84   and tcp dst port 3306
相关文章
相关标签/搜索