centos 6.6 上mysql5.1主從同步 + 讀寫分離(mysql-proxy)基礎實驗

注意本次主從服務器上面均一yum安裝mysql
主從安裝mysql
shell> yum -y install mysql mysql-server

/etc/init.d/mysqld start #初始化數據庫,並啓動數據庫

主服務器上面
添加以下配置
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...

創建主從複製的帳號:
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)

正確的狀態如下:
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;

#注意在slave上面檢測 show slave status時要保證 1、 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)

從服務器上面mysql>desc Persons之後出現上述一樣的結果則說明配置,主從同步成功。但是這個只是主服務器的文件變動之後同步到從服務器上面去了,從服務器的sql語句執行,沒有影響到主服務器的變化,並沒有實現真正意義上的主從同步。請知悉!

*使用mysql-proxy 進行數據庫讀寫分離實驗*
    1、環境配置:
        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 ,在另外一臺機器上安裝

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 #複製管理腳本

4、執行腳本
/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

5、啓動完成後,檢查進程
ps aux | grep mysql-proxy 

6、[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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章