IP規劃:
mysql主:192.168.0.100
mysql從:192.168.0.200
my.cnf配置
主mysql中的[mysqld]項裡除了要配置相關參數以外還要配置必要的三項,現將一個最簡單的樣本:
[mysqld]
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
log-bin=master-bin
log-bin-index=master-bin.index
server-id=1
備機相應的配置如下:
[mysqld]
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
註:relay項配置的是中繼日誌和中繼索引檔案,如果二進位記錄檔和中繼記錄檔名不指定,則預設使用主機名稱。推薦進行自訂。
重啟mysql使上面的配置生效。
在主mysql上建立一個用於複製許可權的使用者:
mysql> grant replication slave on *.* to 'repl'@'%' identified by 'mysqls';
上面建立的為使用者名稱repl,密碼為mysqls的使用者。當然出於安全考慮,可以修改句中的%號為指定主機。
Query OK, 0 rows affected (0.00 sec)
當出現上面的提示時,表示已建立使用者成功。
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000004 | 224 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在備mysql上指定複製主機的相關資訊,並指定要複製的二進位檔案和log號
mysql> change master to master_host='192.168.0.100',master_user='repl',master_password='mysqls',master_log_file='master-bin.000004',master_log_pos=224;
master_host這一項的值建議使用主機名稱,因為如果遇到IP地址變更的,主機名稱一般不會變更,所以還是生效的。但IP變了,這裡還是用的IP ,就會導致主機無法找到對應的主裝置。
啟用slave狀態
mysql> start slave;
使用show slave status查看是否配置成功:
mysql> show slave status;
結果太多,我這裡就不再複製,但主機看下面的兩處,如果看到值是yes,表示已經成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
驗證資料的同步:
主mysql上進行建庫,建表,並插入測試資料:
mysql> create database repl;
mysql> create table my(id int(3),name char(10));
mysql> insert into first_tb values (001,'test');
以上操作在主機上每操作一步,都可以在備機上看到也有相應的庫、表、值的增加。
乾脆來個狠的,在主mysql上利用批處理,加入1000條資料:
測試資料
#!/bin/bash
for (( i=0;i<1000;i++))
do
m=`tr -dc A-Z-a-z</dev/urandom |head -c 5`
mysql -uroot -ptest repl -e"insert into my values ($i,'"$m"')"
done
在備機上:
對應上面的主機的操作,都可以查看到相應的資料。
mysql> show databases;
mysql> use repl;
mysql> show tables;
mysql> select * from my;
上面的操作都是在主機和備機都是在一個全新安裝的環境下進行的測試。而在生產環境中要使用時,先要將雙方要同步的資料庫同容進行同步。而如果主要資料還有應用在使用時,還要重新整理資料庫並銷定資料庫。
mysql>flush tables with read lock;
先利用mysqldump匯出所有的資料,並匯入到備機。
完成後,再在主mysql上解鎖
mysql>unlock tables;
當然如果資料量很大的情況下,利用mysqldump處理是很慢的,這裡建議使用複製物理檔案進行資料同步。
同步操作和上面的相同。
上面的mysql操作同步是對所有庫的完全同步,也包括mysql、information_schema這兩個庫的資料。如果要指定同步的資料庫和忽略的資料庫還要用到四個參數:
binlog-do-db=repl
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
replicate-do-db=repl
replicate-wild-ignore-table=mysql
replicate-wild-ignore-table=information_schema
當然上面的四個參數使用的時候是有講究的,使用不當還是有風險的。回頭再專門做一個總結吧!