1.主從復(fù)制數(shù)據(jù)庫(kù)實(shí)戰(zhàn)環(huán)境準(zhǔn)備
創(chuàng)新互聯(lián)專注于城區(qū)企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),購(gòu)物商城網(wǎng)站建設(shè)。城區(qū)網(wǎng)站建設(shè)公司,為城區(qū)等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
MySQL主從復(fù)制實(shí)踐對(duì)環(huán)境的要求比較簡(jiǎn)單,可以是單機(jī)單數(shù)據(jù)庫(kù)多實(shí)例的環(huán)境,也可以是兩臺(tái)服務(wù)器之間,每臺(tái)服務(wù)器都部署一個(gè)獨(dú)立的數(shù)據(jù)庫(kù)的環(huán)境。本文以單機(jī)數(shù)據(jù)庫(kù)多實(shí)例的環(huán)境進(jìn)行實(shí)踐。
2.主從復(fù)制服務(wù)器角色定義
序號(hào) | 數(shù)據(jù)庫(kù)角色 | 數(shù)據(jù)庫(kù)IP信息 | 數(shù)據(jù)庫(kù)port信息 | 數(shù)據(jù)庫(kù)配置路徑 |
1 | master | 192.168.1.20 | 3306 | /data/3306 |
2 | slave1 | 192.168.1.20 | 3307 | /data/3307 |
3 | slave2 | 192.168.1.20 | 3308 | /data/3308 |
[root@bogon bin]# netstat -lntp | grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 24215/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 24521/mysqld
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 24806/mysqld
3.在主庫(kù)master上執(zhí)行如下配置操作
3.1.設(shè)置server-id值并開啟binlog功能參數(shù)
由MySQL主從復(fù)制原理我們知道,要實(shí)現(xiàn)主從復(fù)制,關(guān)鍵是要開啟binlog日志功能,所以,要打開主庫(kù)的binlog日志參數(shù)。
3.1.1修改主庫(kù)的配置文件/data/3306/my.cnf,執(zhí)行vim /data/3306/my.cnf,按如下內(nèi)容修改參數(shù):
[mysqld]
server-id = 1 #用于同步的實(shí)例server-id 都不能相同
log-bin = /data/3306/mysql-bin #開啟binlog日志功能
3.1.2檢查修改后的參數(shù):
[root@bogon mysql]# grep -E "server-id|log-bin" /data/3306/my.cnf
log-bin = /data/3306/mysql-bin
server-id = 1
3.1.3重啟主庫(kù)mysql服務(wù)
[root@bogon mysql]# /data/3306/mysql restart
3.1.4登錄數(shù)據(jù)庫(kù),檢查參數(shù)修改情況:
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
經(jīng)檢測(cè),主庫(kù)的binlog功能以及開啟;
3.2在主庫(kù)上建立用于主從復(fù)制的賬號(hào)
由主從復(fù)制的原理可知,從庫(kù)要和主庫(kù)同步,需有一個(gè)可以連接主庫(kù)的賬號(hào),并且這個(gè)賬號(hào)是在主庫(kù)上建立的,權(quán)限允許從庫(kù)連接主庫(kù)并同步數(shù)據(jù)。
3.2.1在主庫(kù)創(chuàng)建賬號(hào)rep,具體操作如下:
mysql -uroot -p -S /data/3306/mysql.sock #登錄數(shù)據(jù)庫(kù);
mysql> grant replication slave on *.* to 'rep'@'192.168.1.%' identified by 'lb123456'; #創(chuàng)建rep賬號(hào);
3.2.2檢查賬號(hào)創(chuàng)建情況
mysql> use mysql;
mysql> select user,host from user where user='rep';
+------+-------------+
| user | host |
+------+-------------+
| rep | 192.168.1.% |
+------+-------------+
1 row in set (0.00 sec)
3.3在主庫(kù)上鎖表全備數(shù)據(jù)庫(kù),查看并記錄主庫(kù)狀態(tài)信息;
3.3.1對(duì)主數(shù)據(jù)庫(kù)進(jìn)行鎖表操作;
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)
3.3.2鎖表后查看主庫(kù)狀態(tài)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 259 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注意:需記錄該命令顯示的信息,后續(xù)從庫(kù)需用到此信息;
3.3.3對(duì)主庫(kù)數(shù)據(jù)進(jìn)行全備,具體操作如下:
[root@bogon /]# mkdir -p /server/backup
[root@bogon /]# mysqldump -uroot -S /data/3306/mysql.sock --events -A -B | gzip > /server/backup/mysql_bak_$(date +%F).sql.gz
[root@bogon /]# cd /server/backup
[root@bogon backup]# ll
total 144
-rw-r--r--. 1 root root 144803 Jun 14 14:59 mysql_bak_2016-06-14.sql.gz
3.3.4再次查看主庫(kù)狀態(tài)信息,確保數(shù)據(jù)導(dǎo)出期間,數(shù)據(jù)庫(kù)沒有數(shù)據(jù)變更;
[root@bogon backup]# mysql -uroot -S /data/3306/mysql.sock -e "show master status";
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 259 | | |
+------------------+----------+--------------+------------------+
注意:binlog文件及位置點(diǎn)如果前后一致,即沒有變化,則說明主庫(kù)數(shù)據(jù)庫(kù)在鎖表導(dǎo)出數(shù)據(jù)前后數(shù)據(jù)庫(kù)沒有數(shù)據(jù)變更;
3.3.5解鎖主庫(kù),恢復(fù)可寫;
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
4.在從庫(kù)slave1上執(zhí)行如下配置操作
4.1.設(shè)置server-id值并關(guān)閉binlog功能參數(shù)
這里從庫(kù)的server-id要和主庫(kù)及其他從庫(kù)的不同,并且注釋從庫(kù)的binlog參數(shù)配置
4.1.1修改主庫(kù)的配置文件/data/3307/my.cnf,執(zhí)行vim /data/3307/my.cnf,按如下內(nèi)容修改參數(shù):
[mysqld]
server-id = 2 #用于同步的實(shí)例server-id 都不能相同
#log-bin = /data/3306/mysql-bin #關(guān)閉binlog日志功能
4.1.2檢查修改后的參數(shù):
[root@bogon backup]# grep -E "server-id|log-bin" /data/3307/my.cnf
#log-bin = /data/3307/mysql-bin
server-id = 2
4.1.3重啟主庫(kù)mysql服務(wù)
[root@bogon mysql]# /data/3307/mysql restart
4.1.4登錄數(shù)據(jù)庫(kù),檢查參數(shù)修改情況:
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.00 sec)
4.2把主庫(kù)導(dǎo)出的數(shù)據(jù)恢復(fù)到從庫(kù)slave1上;
[root@bogon /]# cd /server/backup/ #進(jìn)入備份目錄;
[root@bogon backup]# ll
total 144
-rw-r--r--. 1 root root 144803 Jun 14 14:59 mysql_bak_2016-06-14.sql.gz
[root@bogon backup]# gzip -d mysql_bak_2016-06-14.sql.gz #解壓備份數(shù)據(jù)庫(kù)數(shù)據(jù)
[root@bogon backup]# ll
total 516
-rw-r--r--. 1 root root 527436 Jun 14 14:59 mysql_bak_2016-06-14.sql
[root@bogon backup]# mysql -uroot -S /data/3307/mysql.sock < mysql_bak_2016-06-14.sql #恢復(fù)slave1數(shù)據(jù);
4.3登錄從庫(kù)slave1,配置復(fù)制參數(shù)
mysql> change master to
-> master_host='192.168.1.20',
-> master_port=3306,
-> master_user='rep',
-> master_password='lb123456',
-> master_log_file='mysql-bin.000004',
-> master_log_pos=259;
Query OK, 0 rows affected (0.16 sec)
4.4啟動(dòng)從庫(kù)同步開關(guān),查看復(fù)制狀態(tài)
mysql> start slave;
Query OK, 0 rows affected (0.04 sec)
主從復(fù)制是否成功,最關(guān)鍵為下面3項(xiàng)參數(shù):
[root@bogon backup]# mysql -uroot -S /data/3307/mysql.sock -e "show slave status\G" | grep -E "IO_Running|SQL_Running|Seconds_Behind_Master"
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
4.5測(cè)試主從復(fù)制結(jié)果
在主庫(kù)創(chuàng)建新的數(shù)據(jù)庫(kù),然后觀察從庫(kù)的數(shù)據(jù)狀況。
[root@bogon backup]# mysql -uroot -S /data/3306/mysql.sock -e "create database langyabang"; #在主庫(kù)上創(chuàng)建新的數(shù)據(jù)庫(kù)‘langyabang’;
[root@bogon backup]# mysql -uroot -S /data/3306/mysql.sock -e "show databases like 'langyabang'";
+-----------------------+
| Database (langyabang) |
+-----------------------+
| langyabang |
+-----------------------+
#在主庫(kù)上查看數(shù)據(jù)庫(kù)‘langyabang’創(chuàng)建情況;
[root@bogon backup]# mysql -uroot -S /data/3307/mysql.sock -e "show databases like 'langyabang'";
+-----------------------+
| Database (langyabang) |
+-----------------------+
| langyabang |
+-----------------------+
#在從庫(kù)上查看主從復(fù)制情況;
根據(jù)測(cè)試主從是同步的。