標籤:主從 master mysql slave
查看mysql版本
mysql -V
192.168.60.166 主
192.168.60.167 從
1.首先安裝mysql
apt-get install mysql-server
2.修改主伺服器的設定檔/etc/mysql/my.cnf
vim /etc/mysql/my.cnf
把下面2行注釋去掉
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
bind-address = 192.168.60.166
service mysql stop
service mysql start
mysql -uroot -p #登入管理mysql
GRANT REPLICATION SLAVE ON *.* to ‘root‘@‘192.168.60.167‘ identified by ‘123456‘;
#授權給從資料庫伺服器192.168.60.167
GRANT ALL ON *.* TO ‘root‘@‘192.168.60.86‘ IDENTIFIED BY ‘123456‘;
flush privileges;
#允許遠端連線MYSQL
show master status; #查詢主要資料庫狀態
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 106 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
記錄下 FILE 及 Position 的值,在後面進行從伺服器操作的時候需要用到。
xf是如下
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | | |
+------------------+----------+--------------+------------------+
3.配置從伺服器
修改從伺服器的設定檔/etc/mysql/my.cnf
vim /etc/mysql/my.cnf
將 server-id = 1修改為 server-id = 10,並確保這個ID沒有被別的MySQL服務所使用。
bind-address = 192.168.1.153
service mysql stop
service mysql start
mysql -uroot -p
change master to
master_host=‘192.168.1.156‘,
master_user=‘rep1‘,
master_password=‘ylmf‘,
master_log_file=‘mysql-bin.000005‘,
master_log_pos=242;
xf如下
mysql> change master to
master_host=‘192.168.60.166‘,
master_user=‘root‘,
master_password=‘123456‘,
master_log_file=‘mysql-bin.000001‘,
master_log_pos=106;
正確執行後啟動Slave同步進程
mysql> START SLAVE; #主從同步檢查
show slave status;
其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須為YES,才表明狀態正常。
GRANT ALL ON *.* TO ‘root‘@‘192.168.60.86‘ IDENTIFIED BY ‘123456‘;
flush privileges;
#允許遠端連線MYSQL
如果主伺服器已經存在應用資料,則在進行主從複製時,需要做以下處理:
(1)主要資料庫進行鎖表操作,不讓資料再進行寫入動作
FLUSH TABLES WITH READ LOCK;
(2)查看主要資料庫狀態
show master status;
(3)記錄下 FILE 及 Position 的值。
將主伺服器的資料檔案(整個/opt/mysql/data目錄)複製到從伺服器,建議通過tar歸檔壓縮後再傳到從伺服器解壓。
(4)取消主要資料庫鎖定
mysql> UNLOCK TABLES;
4.驗證主從複製效果
在主伺服器上建立資料庫first_db
create database first_db;
在主伺服器上建立表first_tb
create table first_tb(id int(3),name char(10));
在主伺服器上的表first_tb中插入記錄
insert into first_tb values (001,‘myself‘);
在從伺服器上查看,所有記錄已複製過來
由此,整個MySQL主從複製的過程就完成了.
##############################################
5.MYSQL讀寫分離Amoeba方式 xf
(MySQL-Proxy方式指令碼配置比較複雜,不容易擴充)
jdk1.5以上
主伺服器:192.168.60.166
從伺服器:192.168.60.167
MySQL-Proxy調度伺服器:192.168.60.168
配置參考:Amoeba搞定mysql主從讀寫分離.htm
Amoeba
http://ncu.dl.sourceforge.net/sourceforge/amoeba/
9. 測試讀寫分離效果
為了清晰的看到讀寫分離的效果,需要暫時關閉MySQL主從複製功能
登陸從資料庫伺服器192.168.60.167 (從),通過命令列登入管理MySQL伺服器
mysql -u root -pylmf
stop slave;
串連MySQL-Proxy
mysql -uroot -p123456 -P3307 -h192.168.60.168
mysql -uroot -p123456 -h192.168.60.168 -P8066
登陸成功後,在first_db資料的first_tb表中插入兩條記錄
use first_db;
insert into first_tb values (007,‘first‘);
insert into first_tb values (008,‘second‘);
quit
分別登陸到主從資料庫伺服器,對比記錄資訊,首先,檢查主要資料庫伺服器
登入到192.168.1.156主要資料庫伺服器
use first_db;
select * from first_tb;
然後,檢查從資料庫伺服器
登入到192.168.1.153從資料庫伺服器
use first_db;
select * from first_tb;
沒有新記錄存在
由此,我們已經實現了MySQL讀寫分離,目前所有的寫操作都全部在Master主伺服器上,
另外,所有的讀操作都分攤給了其它各個Slave從伺服器上,用來分擔資料庫壓力。
調整服務指令碼,重啟mysqld服務
通過修改start()函數的執行語句,可以調控mysqld服務的啟動選項。例如:
--log-slave-updates=1 #//記錄從庫更新,以便允許鏈式複製
--read-only #//將從庫設為唯讀,僅允許從伺服器線程或具有SUPER許可權的使用者執行
--relay-log=mysqld-relay-bin #//使用固定的中繼記錄檔
--report-host=server205 #//報告給主伺服器的主機名稱或IP地址
--slave_compressed_protocol=1 #//複製過程啟用壓縮,若啟用此項,主、從伺服器都應該添加
--replicate-do-db=mysql #//僅複製指定的庫,其他庫將被忽略,此選項可設定多條(省略時複製所有庫)
--replicate-do-db=mytestdb
--replicate-ignore-db=test #//不複製(忽略)指定的庫,此選項也可以設定多條,do和ignore用其中一種就可以了
--skip-slave-start #//伺服器啟動時跳過複製,需要手動 SLAVE START
--slave-net-timeout=60 #//當從伺服器網路中斷時,再次重試之前等待的時間(預設為60秒)
--master-connect-retry=60 #//當主伺服器串連丟失時,再次重試之前等待的時間(預設為60秒)
本文出自 “XFICC” 部落格,請務必保留此出處http://xficc.blog.51cto.com/1189288/1562168
mysql主從配置