MySql復(fù)制的優(yōu)點(diǎn):
1.如果主服務(wù)器出現(xiàn)問(wèn)題,可以快速切換到從服務(wù)器提供的服務(wù)
2.可以在從服務(wù)器上執(zhí)行查詢操作,降低主服務(wù)器的訪問(wèn)壓力
3.可以在從服務(wù)器上執(zhí)行備份,以避免備份期間影響主服務(wù)器的服務(wù)
注意:一般只有更新不頻繁的數(shù)據(jù)或者對(duì)實(shí)時(shí)性要求不高的數(shù)據(jù)可以通過(guò)從服務(wù)器查詢柬帕,實(shí)時(shí)性要求高的數(shù)據(jù)仍然需要從主服務(wù)器獲得。
1、測(cè)試環(huán)境
操作系統(tǒng) :Windows 7 32位操作系統(tǒng)(安裝雙數(shù)據(jù)庫(kù)端口分別為3306陷寝、3308)
數(shù)據(jù)庫(kù)版本:MySQL 5.7.18
主機(jī)A:192.168.1.103 (Master)
主機(jī)B:192.168.1.103(Slave)
配置的設(shè)置同樣適用于Centos锅很,Centos的配置文件/etc/my.cnf
service mysqld stop #停止數(shù)據(jù)庫(kù)
service mysqld start #啟動(dòng)數(shù)據(jù)庫(kù)
service mysqld restart #重啟數(shù)據(jù)庫(kù)
2、數(shù)據(jù)庫(kù)安裝
可以參考之前寫的文章:安裝MySql并修改初始密碼
這里貼一下Slave數(shù)據(jù)庫(kù)安裝的日志
Microsoft Windows [版本 6.1.7601]
版權(quán)所有 (c) 2009 Microsoft Corporation凤跑。保留所有權(quán)利爆安。
C:\Windows\system32>cd C:\Program Files\mysql-5.7.18-win32-slave\bin
C:\Program Files\mysql-5.7.18-win32-slave\bin>mysqld --initialize
C:\Program Files\mysql-5.7.18-win32-slave\bin>cd ../data
C:\Program Files\mysql-5.7.18-win32-slave\data>TYPE Javen-PC.err
2017-06-29T02:41:51.068120Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is
deprecated. Please use --explicit_defaults_for_timestamp server option (see doc
umentation for more details).
2017-06-29T02:41:51.573560Z 0 [Warning] InnoDB: New log files created, LSN=45790
2017-06-29T02:41:51.643760Z 0 [Warning] InnoDB: Creating foreign key constraint
system tables.
2017-06-29T02:41:51.699920Z 0 [Warning] No existing UUID has been found, so we a
ssume that this is the first time that this server has been started. Generating
a new UUID: 818f5c2f-5c74-11e7-8dff-000c29b2597f.
2017-06-29T02:41:51.699920Z 0 [Warning] Gtid table is not ready to be used. Tabl
e 'mysql.gtid_executed' cannot be opened.
2017-06-29T02:41:51.713960Z 1 [Note] A temporary password is generated for root@
localhost: =rc%=eBVg0AY
C:\Program Files\mysql-5.7.18-win32-slave\data>cd ..
C:\Program Files\mysql-5.7.18-win32-slave>cd bin
C:\Program Files\mysql-5.7.18-win32-slave\bin>mysqld -install MySQL2
Service successfully installed.
C:\Program Files\mysql-5.7.18-win32-slave\bin>net start MySQL2
MySQL2 服務(wù)正在啟動(dòng) .
MySQL2 服務(wù)已經(jīng)啟動(dòng)成功。
C:\Program Files\mysql-5.7.18-win32-slave\bin>mysql -u root -p=rc%=eBVg0AY -P3308
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.18
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT
OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
1仔引、在mysql-5.7.18-win32-slave根目錄中創(chuàng)建my.ini初始化配置文件
[mysqld]
# set basedir to your installation path
basedir=C:\\Program Files\\mysql-5.7.18-win32-slave
# set datadir to the location of your data directory
datadir=C:\\Program Files\\mysql-5.7.18-win32-slave\\data
port = 3308
2扔仓、進(jìn)入bin目錄mysqld --initialize初始化數(shù)據(jù)庫(kù)文件
3、TYPE Javen-PC.err 查看處理初始化密碼咖耘。Javen-PC
.err 是你電腦的名稱 翘簇,這里的初始化密碼為=rc%=eBVg0AY
4、注冊(cè)mysql服務(wù) mysqld -install MySQL2 **
5儿倒、啟動(dòng)服務(wù)net start MySQL2**
6缘揪、登錄本地mysql:mysql -u root -p=rc%=eBVg0AY -P3308
7、修改本地root用戶密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
8义桂、授權(quán)遠(yuǎn)程登錄(需要關(guān)閉防火墻或者配置指定端口可以訪問(wèn))
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
3找筝、配置主服務(wù)器Master
3.1 給從服務(wù)器設(shè)置授權(quán)用戶(創(chuàng)建復(fù)制帳號(hào))
建立一個(gè)帳戶javen,并且只能允許從192.168.1.103這個(gè)地址上來(lái)登陸慷吊,密碼是123456袖裕。
mysql> grant replication slave on *.* to 'javen'@'192.168.1.103' identified by '123456';
mysql> flush privileges;
3.2 主服務(wù)器Master配置
[mysqld]
# set basedir to your installation path
basedir=C:\\Program Files\\mysql-5.7.18-win32
# set datadir to the location of your data directory
datadir=C:\\Program Files\\mysql-5.7.18-win32\\data
port = 3306
log-bin = mysql-bin #[必須]啟用二進(jìn)制日志
server-id = 1 #[必須]服務(wù)器唯一ID,默認(rèn)是1
expire-logs-days = 7 #只保留7天的二進(jìn)制日志溉瓶,以防磁盤被日志占滿
#replicate-do-db = test #需要做復(fù)制的數(shù)據(jù)庫(kù)名急鳄;這里不設(shè)置只配置備份的數(shù)據(jù)庫(kù)
binlog-ignore-db = mysql #不備份的數(shù)據(jù)庫(kù)
binlog-ignore-db = information_schema
binlog-ignore-db = performation_schema
binlog-ignore-db = sys
#binlog-do-db=test #需要做復(fù)制的數(shù)據(jù)庫(kù)名
3.3 重啟MySQL服務(wù)并設(shè)置讀取鎖定
net stop MySQL
net start MySQL
在主服務(wù)器上設(shè)置讀取鎖定有效,確保沒(méi)有數(shù)據(jù)庫(kù)操作堰酿,以便獲得一個(gè)一致性的快照
mysql -u root -proot -P3306
mysql> flush tables with read lock;
3.4 查看主服務(wù)器上當(dāng)前的二進(jìn)制日志名和偏移量值
mysql> show master status;
+------------------+----------+--------------+----------------------------------
----------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB
| Executed_Gtid_Set |
+------------------+----------+--------------+----------------------------------
----------------+-------------------+
| mysql-bin.000001 | 2519 | | mysql,information_schema,performa
tion_schema,sys | |
+------------------+----------+--------------+----------------------------------
----------------+-------------------+
1 row in set (0.00 sec)
這里的 File 疾宏、Position 是在配置Salve的時(shí)候要使用到的,Binlog_Do_DB表示要同步的數(shù)據(jù)庫(kù)触创,Binlog_Ignore_DB 表示Ignore的數(shù)據(jù)庫(kù)坎藐,這些都是在配置的時(shí)候進(jìn)行指定的。
另外:如果執(zhí)行這個(gè)步驟始終為Empty set(0.00 sec)哼绑,那說(shuō)明前面的my.init沒(méi)配置對(duì)岩馍。
4、配置從服務(wù)器Slave
4.1 修改從數(shù)據(jù)庫(kù)的配置
[mysqld]
# set basedir to your installation path
basedir=C:\\Program Files\\mysql-5.7.18-win32-slave
# set datadir to the location of your data directory
datadir=C:\\Program Files\\mysql-5.7.18-win32-slave\\data
port = 3308
log-bin=mysql-bin
server-id=3
binlog-ignore-db = mysql #不備份的數(shù)據(jù)庫(kù)
binlog-ignore-db = information_schema
binlog-ignore-db = performation_schema
binlog-ignore-db = sys
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
4.2 重啟從數(shù)據(jù)庫(kù)并設(shè)置Slave數(shù)據(jù)庫(kù)
net stop MySQL2
net start MySQL2
登錄從數(shù)據(jù)庫(kù)并做如下設(shè)置
mysql> stop slave; #關(guān)閉Slave
mysql> change master to master_host='192.168.1.103',master_user='javen',master_password='123456',master_log_file='mysql-bin.000001', master_log_pos= 2519;
mysql> start slave; #開啟Slave
注意:在這里指定Master的信息抖韩,master_log_file是在配置Master的時(shí)候的File選項(xiàng)蛀恩, master_log_pos是在配置Master的Position 選項(xiàng),這里要進(jìn)行對(duì)應(yīng)茂浮。
4.3 查看Slave配置的信息
show slave status 查看配置的信息:
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.103
Master_User: mysync
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1192
Relay_Log_File: Javen-PC-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1192
Relay_Log_Space: 530
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 818f5c2f-5c74-11e7-8dff-000c29b2597f
Master_Info_File: C:\Program Files\mysql-5.7.18-win32-slave\data\ma
ster.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more up
dates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
5双谆、關(guān)閉掉主數(shù)據(jù)庫(kù)的讀取鎖定
mysql> unlock tables;
6壳咕、在主數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表以及添加數(shù)據(jù)測(cè)試
在主數(shù)據(jù)庫(kù)(Master)添加一個(gè)test數(shù)據(jù)庫(kù)并在其中添加t1的數(shù)據(jù)表。如下圖
在從數(shù)據(jù)庫(kù)(Slave)自動(dòng)同步顽馋,如下圖