查看mysql版本mysql
mysql -Vsql
192.168.60.166 主數據庫
192.168.60.167 從vim
1.首先安裝mysql服務器
apt-get install mysql-server網絡
2.修改主服務器的配置文件/etc/mysql/my.cnfide
vim /etc/mysql/my.cnf函數
把下面2行註釋去掉測試
server-id = 1ui
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秒)