主從復制的核心就是把mysql數據庫從A機器同時備份到B機器了,這樣可以方便分布式的數據處理了,下面我們來看一個經典的mysql主從復制配置步驟.
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 --Vevb.com
- 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) --Vevb.com
在備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
當然上面的四個參數使用的時候是有講究的,使用不當還是有風險的,回頭再專門做一個總結吧.
新聞熱點
疑難解答