mysql主从复制实践之单数据库多实例
1.主從復制數據庫實戰環境準備
? ? ? ?MySQL主從復制實踐對環境的要求比較簡單,可以是單機單數據庫多實例的環境,也可以是兩臺服務器之間,每臺服務器都部署一個獨立的數據庫的環境。本文以單機數據庫多實例的環境進行實踐。
2.主從復制服務器角色定義
| 序號 | 數據庫角色 | 數據庫IP信息 | 數據庫port信息 | 數據庫配置路徑 |
| 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.在主庫master上執行如下配置操作
3.1.設置server-id值并開啟binlog功能參數
? ? ? ?由MySQL主從復制原理我們知道,要實現主從復制,關鍵是要開啟binlog日志功能,所以,要打開主庫的binlog日志參數。
3.1.1修改主庫的配置文件/data/3306/my.cnf,執行vim /data/3306/my.cnf,按如下內容修改參數:
[mysqld]
server-id = 1 ? ? ? ? ? ? ? ? ? ? ? ?#用于同步的實例server-id 都不能相同
log-bin = /data/3306/mysql-bin ? ? ? ? ? ? #開啟binlog日志功能
3.1.2檢查修改后的參數:
[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重啟主庫mysql服務
[root@bogon mysql]# /data/3306/mysql restart
3.1.4登錄數據庫,檢查參數修改情況:
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)
經檢測,主庫的binlog功能以及開啟;
3.2在主庫上建立用于主從復制的賬號
? ? ? ?由主從復制的原理可知,從庫要和主庫同步,需有一個可以連接主庫的賬號,并且這個賬號是在主庫上建立的,權限允許從庫連接主庫并同步數據。
3.2.1在主庫創建賬號rep,具體操作如下:
mysql -uroot -p -S /data/3306/mysql.sock ? ? ? ? #登錄數據庫;
mysql> grant replication slave on *.* to 'rep'@'192.168.1.%' identified by 'lb123456';? #創建rep賬號;
3.2.2檢查賬號創建情況
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在主庫上鎖表全備數據庫,查看并記錄主庫狀態信息;
3.3.1對主數據庫進行鎖表操作;
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)
3.3.2鎖表后查看主庫狀態
mysql> show master status;
+------------------+----------+--------------+------------------+
| File ? ? ? ? ? ? | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | ? ? ?259 | ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ?|
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注意:需記錄該命令顯示的信息,后續從庫需用到此信息;
3.3.3對主庫數據進行全備,具體操作如下:
[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再次查看主庫狀態信息,確保數據導出期間,數據庫沒有數據變更;
[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文件及位置點如果前后一致,即沒有變化,則說明主庫數據庫在鎖表導出數據前后數據庫沒有數據變更;
3.3.5解鎖主庫,恢復可寫;
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
4.在從庫slave1上執行如下配置操作
4.1.設置server-id值并關閉binlog功能參數
這里從庫的server-id要和主庫及其他從庫的不同,并且注釋從庫的binlog參數配置
4.1.1修改主庫的配置文件/data/3307/my.cnf,執行vim /data/3307/my.cnf,按如下內容修改參數:
[mysqld]
server-id = 2 ? ? ? ? ? ? ? ? ? ? ? ?#用于同步的實例server-id 都不能相同
#log-bin = /data/3306/mysql-bin ? ? ? ? ? ? #關閉binlog日志功能
4.1.2檢查修改后的參數:
[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重啟主庫mysql服務
[root@bogon mysql]# /data/3307/mysql restart
4.1.4登錄數據庫,檢查參數修改情況:
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把主庫導出的數據恢復到從庫slave1上;
[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
[root@bogon backup]# gzip -d mysql_bak_2016-06-14.sql.gz ? ? ?#解壓備份數據庫數據
[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 #恢復slave1數據;
4.3登錄從庫slave1,配置復制參數
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啟動從庫同步開關,查看復制狀態
mysql> start slave;
Query OK, 0 rows affected (0.04 sec)
主從復制是否成功,最關鍵為下面3項參數:
[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測試主從復制結果
在主庫創建新的數據庫,然后觀察從庫的數據狀況。
[root@bogon backup]# mysql -uroot -S /data/3306/mysql.sock -e "create database langyabang"; ? #在主庫上創建新的數據庫‘langyabang’;
[root@bogon backup]# mysql -uroot -S /data/3306/mysql.sock -e "show databases like 'langyabang'";
+-----------------------+
| Database (langyabang) |
+-----------------------+
| langyabang ? ? ? ? ? ?|
+-----------------------+ ? ??
#在主庫上查看數據庫‘langyabang’創建情況;
[root@bogon backup]# mysql -uroot -S /data/3307/mysql.sock -e "show databases like 'langyabang'";
+-----------------------+
| Database (langyabang) |
+-----------------------+
| langyabang ? ? ? ? ? ?|
+-----------------------+
#在從庫上查看主從復制情況;
根據測試主從是同步的。
轉載于:https://blog.51cto.com/jeff1/1789141
總結
以上是生活随笔為你收集整理的mysql主从复制实践之单数据库多实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpriteBuilder物理对象的父子
- 下一篇: Linux下DRBD配置