在實際企業應用環境當中,單臺mysql數據庫是不足以滿足日後業務需求的。譬如服務器發生故障,沒有備份服務器來提供服務的話,業務就得停止。介於這種情況,我們來學習一下mysql主從複製。
使用mysql主從複製的好處有:
1、採用主從服務器這種架構,穩定性得以提升。如果主服務器發生故障,我們可以使用從服務器來提供服務。
2、在主從服務器上分開處理用戶的請求,可以提升數據處理效率。
3、將主服務器上的數據複製到從服務器上,保護數據免受意外的損失。
環境描述:
新企業要搭建架構爲主從複製的mysql數據庫。
主服務器(mysql-master):IP地址:192.168.124.128,mysql已安裝,沒有用戶數據。
從服務器(mysql-slave) :IP地址:192.168.124.129,mysql已安裝,沒有用戶數據。
主從服務器均可正常提供服務。
同步整個數據庫
主從複製配置如下:
一。在主服務器上操作:
1)、確保/etc/my.cnf中有如下參數,沒有的話需手工添加,並重啓mysql服務。
[mysqld]
log-bin=mysql-bin 啓動二進制文件
server-id=1 服務器ID
2)、登錄mysql,在mysql中添加一個aaa的賬號,並授權給從服務器。
[root@localhost ~]# mysql -uroot –p123456 登錄mysql(默認沒有密碼)
mysql> grant replication slave on *.* to 'aaa'@'192.168.124.129' identified by '1234'; 創建aaa用戶,並授權給192.168.124.129使用。
3)、查詢主數據庫狀態,並記下File及Position的值,這個在後面配置從服務器的時候要用到。
mysql> show master status;
二。在從服務器上操作:
1)、確保/etc/my.cnf中有log-bin=mysql-bin和server-id=1參數,並把server-id=1修改爲server-id=2。修改之後如下所示:
[mysqld]
log-bin=mysql-bin 啓動二進制文件
server-id=2 服務器ID
2)、重啓mysql服務。
[root@localhost ~]#service mysqld restart
3)、登錄mysql,執行如下語句
[root@localhost ~]# mysql -uroot –p123456
mysql> change master to master_host='192.168.124.128',master_user='aaa',master_password='1234',master_log_file='mysql-bin.000001',master_log_pos=258;
4)、啓動slave同步。
mysql> start slave;
5)、檢查主從同步,如果您看到Slave_IO_Running和Slave_SQL_Running均爲Yes,則主從複製連接正常。
mysql> show slave status\G
驗證配置是否正常,mysql主從能否正常複製。
在主數據庫上新建一個庫,並且在庫中寫一個表和一些數據。
[root@localhost ~]# mysql -uroot –p123456
mysql> create database aaa;
mysql> use aaa;
mysql> create table user(id int(5),name char(10));
mysql> insert into user values (00001,'zhangsan');
在從數據庫中驗證一下,是否正常複製到數據。
[root@localhost ~]# mysql -uroot –p123456
mysql> show databases;
mysql>use aaa;
mysql>select * from aaa.user;
從上圖中的結果,我們可以看到mysql主從複製已經在起作用了,我們在主數據庫中寫入的數據已經複製到我們的從數據庫中了。
同步單個庫
主從複製配置如下:
在主數據庫上操作:
1)、確保/etc/my.cnf中有如下參數,沒有的話需手工添加,並重啓mysql服務。
[mysqld]
log-bin=mysql-bin 啓動二進制文件
server-id=1 服務器ID
binlog-do-db=test #指定需要日誌的數據庫
[root@localhost ~]#service mysqld restart
2)、登錄mysql,在mysql中添加一個用戶同步的賬號haha,並授權給從服務器即Slave機器有File權限,只賦予Slave機器有File權限還不行,還要給它REPLICATION SLAVE的權限纔可以。。
[root@localhost ~]# mysql -uroot –p123456
mysql>grant file on *.* to 'haha'@'192.168.124.129' identified by '1234';
mysql>grant replication slave on *.* to 'haha'@'192.168.124.129' identified by '1234';
3)、用show master status/G命令看日誌情況。正常爲:
4)、進行鎖表操作,不讓數據進行寫入動作,這麼做事爲了防止從數據庫的原始數據和主數據庫的原始數據不一致。
mysql> flush tables with read lock;
5)、使用mysqldump命令將剛纔查詢到的庫導出來。
[root@localhost ~]#mysqldump –uroot –p123456 aaa > aaa.sql
6)、將導出來的庫文件傳送到從數據庫的/tmp目錄下。
[root@localhost ~]#scp -r aaa.sql [email protected]:/tmp
這中間需要輸入一次驗證口令。見下圖
7)、進入mysql,進行表解鎖操作。
mysql> unlock tables;
主數據庫服務器上的操作告一段落。
在從數據庫上操作:
1)、修改配置文件/etc/my.cnf
[mysqld]
log-bin=mysql-bin 啓動二進制文件
server-id=2服務器ID
master-host=192.168.124.128
master-user=haha #同步用戶帳號
master-password=1234
master-port=3306
master-connect-retry=60 #預設重試間隔60秒
replicate-do-db=aaa #告訴slave只做backup數據庫的更新
2)、重啓mysql服務。
[root@localhost ~]# service mysqld restart
3)、登錄數據庫,創建名爲aaa的庫。
mysql> create database aaa;
4)、將傳過來的數據文件分別導入對應的數據庫下。
[root@localhost ~]# mysql -uroot –p123456 aaa < aaa.sql
5)、檢查主從同步,如果您看到Slave_IO_Running和Slave_SQL_Running均爲Yes,則主從複製連接正常。
mysql> show slave status\G
驗證主從是否正常配置:
在主數據庫上插入數據:
mysql> show databases;
mysql> show tables;
mysql> use aaa;
mysql> select * from aaa.user;
mysql> insert into user values (4,'ergou');
mysql> insert into user values (5,'sanwazi');
在從數據庫上查看是否正常同步:
mysql> show databases;
mysql> use aaa;
mysql> select * from aaa.user;
ps既做主又做從的my.cnf裏一定寫一行
log-slave-updates