*兩臺Linux服務器,一主一從,從數據庫同步主數據庫的數據
*系統:Centos 6.4-64bit
*主(master)數據庫服務器IP地址:192.168.100.200
*從 (slave )數據庫服務器IP地址:192.168.100.201
*本實驗用系統自帶的rpm包安裝,以提供mysql服務
1、分別在兩臺服務器上安裝mysql服務
# yum -y install mysql mysq-server
# service mysqld start
# chkconfig mysqld on
2、配置主數據庫
默認可以同步所有的庫和表
# vi /etc/my.cnf #添加如下參數
log-bin=mysqld-bin #開啓binlog日誌,必須開啓
server_id=200 #數據庫ID值,唯一的,一般用本機的IP地址主機位
binlog-do-db=test #設置從服務器可以同步的庫test,有多個就寫多行
binlog-ignore-db=mysql #設置不可以同步的庫mysql
# service mysqld restart #重啓服務
3、在主數據庫授權從數據庫連接自己,且有拷貝數據的權限
登錄到主服務器並授權,授權的用戶名是slaveuser,密碼是123456
mysql>grant replication slave on *.* to [email protected] identified by'123456';
4、在從服務器上驗證授權是否成功
在從數據庫上若能登錄到主數據庫,則說明授權成功了
# mysql -h192.168.100.200 -uslaveuser -p123456
mysql> show grants; #查看用戶slaveuser自己被授的權限
+---------------------------------------------------------------------------+
| Grants for [email protected] |
+---------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'192.168.100.201' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+---------------------------------------------------------------------------+
5、查看主數據庫服務器上有哪些從服務器
mysql> show slave hosts; #從數據庫還沒配置,所以還看不到
6、配置從數據庫
# vi /etc/my.cnf #添加如下參數
log-bin=mysqld-bin #開啓binlog日誌
server_id=201 #數據庫ID號
report-host=localhost #向主服務器報告自己主機名,主服務器查詢時會知道是哪個從服務器
report-host=192.168.100.201 #向主服務器報告自己IP,主服務器查詢時會知道是哪個從服務器
slave-net-timeout=60 #主從網絡中斷時,等待60秒自動連接
read_only=1 #只讀模式(同步與super權限用戶例外)
注:若想限制同步的庫,參數格式如下
replicate-do-db=“數據庫名” #允許同步的庫
replicate-ignore-db=“數據庫名” #不允許同步的庫
# service mysqld restart
重啓完從數據庫,此時,就可以登錄主數據庫查看主數據庫服務器上有哪些從服務器,如下
mysql> show slave hosts;
+-----------+-----------------+------+-------------------+-----------+
| Server_id | Host | Port | Rpl_recovery_rank | Master_id |
+-----------+-----------------+------+-------------------+-----------+
| 201 | 192.168.100.201 | 3306 | 0 | 200 |
+-----------+-----------------+------+-------------------+-----------+
7、登錄主數據庫,查看主數據庫狀態裏當前使用的binlog和偏移量
mysql> show master status; #顯示主數據庫服務器的狀態
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000004 | 120 | | |
+-------------------+----------+--------------+------------------+
File和Postion對應的值mysqld-bin.000004和120要記錄下來,下面步驟要用到
說明:
File #正在使用的binlog日誌
Position #正在使用binlog日誌的偏移量,如圖含義是從偏移量位置120開始記錄
Binlog_DO_DB #顯示准許同步複製的庫
Binlog_Ignore_DB #顯示不准許同步複製的庫
Executed_Gtid_Set #跟binlog日誌相似,都是用來主從同步的,默認關閉,兩個用一個就可以.
開啓Gtid: #沒特殊要求不開啓
vim /etc/my.cnf
gtid_mode=on
8、從數據庫指定主數據庫(從數據庫上操作)
mysql>change master to
->master_host="192.168.100.200", #主數據庫的IP地址
->master_user="slaveuser", #主數據庫上授權的用戶
->master_password="123456", #授權用戶的密碼
->master_log_file="mysqld-bin.000001", #上一步中File字段裏的binlog日誌
->master_log_pos=120; #上一步中Postion字段裏的偏移量
操作完以上命令,/var/lib/mysql/下會生成4個文件
ls /var/lib/mysql
master.info #連接主數據庫服務器的配置信息
relay-log.info #中繼日誌信息
localhost-relay-bin.000001 #中繼日誌文件,是主複製過來的日誌文件叫中繼
localhost-relay-bin.index #中繼日誌文件列表
9、登錄從數據庫,開啓從數據庫裏的server_IO與server_SQL進程
mysql>start slave; #開啓I0和SQL(停止用:stop slave)
mysql>show slave status\G; #查看I0和SQL進程狀態
Slave_IO_Running: YES #必須開啓狀態
Slave_SQL_Running: YES #必須開啓狀態
>只有IO-Running和SQL_Running同時爲YES,主從才能同步
>執行start slave後,若Slave_IO_Running還是NO狀態,1分鐘後再查看
10、驗證主從是否能同步
登錄主數據庫並在庫test下創建表student
mysql>use test;
mysql>create table student(name char(3),birthday date); #創建表student
mysql> desc student; #查看錶結構
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| name | char(3) | YES | | NULL | |
| birthday | date | YES | | NULL| |
+----------+---------+------+-----+---------+-------+
登錄從數據庫,查看是否同步了主數據庫創建的表student,如下所示,說明主從能同步了。
mysql>use test;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
+----------------+
完畢,謝謝。