您好,登錄后才能下訂單哦!
本文講述了MySQL單主、雙主模式的配置方法、注意事項、和維護的一些事項。
編輯/etc/my.cnf,在mysqld配置段中添加以下內容(需重啟服務)
server-id=1
log_bin=/data/mysql/logs/mysql-bin
啟動數據庫并做授權:
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'node2'@'192.168.200.%' IDENTIFIED BY 'node2pass';
MariaDB [(none)]> FLUSH PRIVILEGES;
編輯/etc/my.cnf,在mysqld配置段中添加以下內容(需重啟服務)
server-id=2
relay-log=/data/mysql/logs/relay-bin
啟動服務后設置主節點并啟動
MariaDB [(none)]> change master to master_host='192.168.200.41',master_port=3306,master_user='node2',master_password='node2pass',master_log_file='mysql-bin.000003', master_log_pos =4;
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.200.41
Master_User: node2
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 927
Relay_Log_File: relay-bin.000003
Relay_Log_Pos: 604
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
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: 927
Relay_Log_Space: 1783
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
查看show slave status時,Slave_IO_Running和Slave_SQL_Running狀態為yes時即成功。可在主節點創建庫或者表查看從節點是否也有。
180603 16:46:49 [Note] Slave I/O thread: connected to master 'node2@192.168.200.41:3306',replication started in log 'mysql-bin.000003' at position 760
180603 16:46:49 [ERROR] Error reading packet from server: binlog truncated in the middle of event; consider out of disk space on master; the first event 'mysql-bin.000003' at 760, the last event read from 'mysql-bin.000003' at 760, the last byte read from 'mysql-bin.000003' at 769. ( server_errno=1236)
180603 16:46:49 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the first event 'mysql-bin.000003' at 760, the last event read from 'mysql-bin.000003' at 760, the last byte read from 'mysql-bin.000003' at 769.', Error_code: 1236
解決方法:
通過show binary logs查看當前的二進制文件有哪些,再通過show binlog events in 'BINLOG FILE NAME',找到正確的POS位置,并在change master時使用正確的POS位置。
MariaDB [(none)]> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 30355 |
| mysql-bin.000002 | 1038814 |
| mysql-bin.000003 | 491 |
+------------------+-----------+
3 rows in set (0.00 sec)
MariaDB [(none)]> show binlog events in 'mysql-bin.000003';
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
| mysql-bin.000003 | 4 | Format_desc | 1 | 245 | Server ver: 5.5.56-MariaDB, Binlog ver: 4 |
| mysql-bin.000003 | 245 | Query | 1 | 416 | grant replication slave,replication client on *.* to lxk@'192.168.200.%' identified by 'lxkpass' |
| mysql-bin.000003 | 416 | Query | 1 | 491 | flush privileges |
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
如上代碼:選擇Pos(開始位置)或者End_log_pos(結束位置)都可以。
節點1:編輯/etc/my.cnf,在mysqld配置段添加以下內容保存退出:
log_bin=/data/mysql/logs/mysql-bin
relay_log=/data/mysql/logs/relay-log
注:要確保mysql對/data/mysql/logs目錄有讀寫權限
節點2:編輯/etc/my.cnf,在mysqld配置段添加以下內容保存退出:
log_bin=/data/mysql/logs/mysql-bin
relay_log=/data/mysql/logs/relay-log
注:要確保mysql對/data/mysql/logs目錄有讀寫權限
節點1 IP:192.168.200.41 節點2 IP:192.168.200.42
節點1與節點2都進行同樣的操作以授權一個用戶:
MariaDB [(none)]> grant replication slave,replication client on *.* to lxk@'192.168.200.%' identified by 'lxkpass';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
查看要復制的Pos位置:
節點1:
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 491 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> show binlog events in 'mysql-bin.000003';
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
| mysql-bin.000003 | 4 | Format_desc | 1 | 245 | Server ver: 5.5.56-MariaDB, Binlog ver: 4 |
| mysql-bin.000003 | 245 | Query | 1 | 416 | grant replication slave,replication client on *.* to lxk@'192.168.200.%' identified by 'lxkpass' |
| mysql-bin.000003 | 416 | Query | 1 | 491 | flush privileges |
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
節點2:
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 491 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> show binlog events in 'mysql-bin.000003';
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
| mysql-bin.000003 | 4 | Format_desc | 2 | 245 | Server ver: 5.5.56-MariaDB, Binlog ver: 4 |
| mysql-bin.000003 | 245 | Query | 2 | 416 | grant replication slave,replication client on *.* to lxk@'192.168.200.%' identified by 'lxkpass' |
| mysql-bin.000003 | 416 | Query | 2 | 491 | flush privileges |
+------------------+-----+-------------+-----------+-------------+--------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
因為為新數據庫,兩個節點的pos值相同,都為491,生產環境根據需要調整,一般位置的選取都是從授權后的位置開始。
執行同步語句:
節點1:
MariaDB [(none)]> change master to master_host='192.168.200.42',master_user='lxk',master_password='lxkpass',master_log_file='mysql-bin.000003',master_log_pos=491;
Query OK, 0 rows affected (0.27 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
節點2:
MariaDB [(none)]> change master to master_host='192.168.200.41',master_user='lxk',master_password='lxkpass',master_log_file='mysql-bin.000003',master_log_pos=491;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.200.41 #主節點地址
Master_User: lxk #主節點用戶名
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 491
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 529
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes #IO線程開啟
Slave_SQL_Running: Yes #SQL線程開啟
只要執行結果中slave_IO_Runing和Slave_SQL_Runing狀態為Yes,即表示從節點連接主節點成功并成功開啟復制功能。
MariaDB [(none)]> create database testdb;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| testdb |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [testdb]> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 30355 |
| mysql-bin.000002 | 1038814 |
| mysql-bin.000003 | 1364 |
+------------------+-----------+
3 rows in set (0.00 sec)
MariaDB [testdb]> purge binary logs to 'mysql-bin.000003'; #清空至mysql-bin.000003的日志
Query OK, 0 rows affected (0.01 sec)
MariaDB [testdb]> show binary logs; #再次查看日志
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000003 | 1364 |
+------------------+-----------+
1 row in set (0.00 sec)
[root@node1 ~]# ls /data/mysql/logs/ #查看二進制日志保存目錄,000003之前的都已經刪除
mysql-bin.000003 mysql-bin.index relay-log.000001 relay-log.000002 relay-log.index
復制監控
如何確定主從節點數據是否一致
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。