MySQL高可用(三)搭建主備同步實戰
阿新 • • 發佈:2020-12-23
### 目標
掌握如何搭建一主一備的主備架構
### 實驗環境
- 系統:Ubuntu 18.04.1 LTS
- MySQL版本:5.7.32
- 主庫IP:192.168.200.120
- 備庫IP:192.168.200.121
### 操作步驟
#### 1.分別在兩臺伺服器上安裝MySQL
```sheel
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
```
注:要求MySQL版本號一致
#### 2.(主庫)配置同步賬號
建立資料庫複製使用者:
```mysql
mysql> CREATE USER 'repl'@'192.168.200.121' IDENTIFIED BY '123456';
```
授權:
```mysql
mysql> grant replication slave on *.* to 'repl'@'192.168.200.121';
```
#### 3.(主庫)修改/etc/my.cnf檔案,注意確保:server-id 唯一
```
[mysqld]
bind-address = 192.168.200.120 //這裡的IP地址必須是通過ipconfig查出來的IP
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = empw_test
#binlog_ignore_db = include_database_name
binlog_format = row # binlog的格式 row 具有 statement和mixed 不具備的優勢 填寫 row
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1 # 和 sync_binlog 組成雙1 配置 保證資料的完整性
```
#### 4.(主庫)重啟master端
```sheel
service mysql restart
```
#### 5.(主庫)查詢主庫上當前的二進位制日誌名和偏移量值,記錄下file跟position的值,待會從庫要用
```mysql
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 154 | empw_test | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
```
#### 6.(從庫)修改/etc/my.cnf檔案,注意確保:server-id 唯一
```
[mysqld]
server-id = 2
```
#### 7.(從庫)重啟slave端
```sheel
service mysql restart
```
#### 8.(從庫)對從資料庫伺服器做相應設定,指定複製使用的使用者,主資料庫伺服器的IP、埠以及開始執行復制的日誌檔案和位置等
```mysql
mysql> CHANGE MASTER TO MASTER_HOST='192.168.200.120',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=154;
```
#### 9.(從庫)啟動slave執行緒
```mysql
mysql> start slave;
```
#### 10.主庫跟從庫分別檢查狀態
檢查master的:
```mysql
mysql> show processlist;
+----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
| 2 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 3 | repl | 192.168.200.121:56822 | NULL | Binlog Dump | 12 | Master has sent all binlog to slave; waiting for more updates | NULL |
+----+------+-----------------------+------+-------------+------+---------------------------------------------------------------+------------------+
2 rows in set (0.00 sec)
```
看到上面的Command: Binlog Dump說明配置成功!
檢查slave的:
```mysql
mysql> show slave status;
```
提示: `Slave_IO_Running` 和 `Slave_SQL_Running` 兩個值為YES基本上成功了。