Linux中國

如何在 CentOS Linux 中配置 MariaDB 複製

複製的簡單圖解示範

mysql 複製原理

開始之前,你應該知道什麼是二進位日誌文件以及 Ibdata1。

二進位日誌文件中包括關於資料庫,數據和結構的所有更改的記錄,以及每條語句的執行了多長時間。二進位日誌文件包括一系列日誌文件和一個索引文件。這意味著主要的SQL語句,例如CREATE, ALTER, INSERT, UPDATE 和 DELETE 會放到這個日誌文件中;而例如SELECT這樣的語句就不會被記錄,它們可以被記錄到普通的query.log文件中。

Ibdata1 簡單的說據是一個包括所有表和所有資料庫信息的文件。

主伺服器配置

首先升級伺服器

sudo yum install update -y && sudo yum install upgrade -y

我們工作在centos7 伺服器上

sudo cat /etc/redhat-release

CentOS Linux release 7.0.1406 (Core)

安裝 MariaDB

sudo yum install mariadb-server -y

啟動 MariaDB 並啟用隨伺服器啟動

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

輸出如下:

ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

檢查 MariaDB 狀態

sudo service mariadb status

或者使用

sudo systemctl is-active mariadb.service

輸出如下:

Redirecting to /bin/systemctl status  mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)

設置 MariaDB 密碼

mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
mysql> flush privileges;
mysql> exit

這裡 SOMEROOT**PASSWORD 是你的 root 密碼。 例如我用"q"作為密碼,然後嘗試登錄:

sudo mysql -u root -pSOME_ROOT_PASSWORD

輸出如下:

Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 5
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

輸入 'help;' 或 'h' 查看幫助信息。 輸入 'c' 清空當前輸入語句。

讓我們創建包括一些數據的表的資料庫

創建資料庫/模式

sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;

其中:

test_repl - 將要被複制的模式的名字

輸出:如下

Query OK, 1 row affected (0.00 sec)

創建 Persons 表

mysql> use test_repl;

CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

輸出如下:

mysql> MariaDB [test_repl]> CREATE TABLE Persons (
-> PersonID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );
Query OK, 0 rows affected (0.01 sec)

插入一些數據

mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");

輸出如下:

Query OK, 5 row affected (0.00 sec)

檢查數據

mysql> select * from Persons;

輸出如下:

+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        2 | LastName2 | FirstName2 | Address2 | City2 |
|        3 | LastName3 | FirstName3 | Address3 | City3 |
|        4 | LastName4 | FirstName4 | Address4 | City4 |
|        5 | LastName5 | FirstName5 | Address5 | City5 |
+----------+-----------+------------+----------+-------+

配置 MariaDB 複製

你需要在主節點伺服器上編輯 my.cnf文件來啟用二進位日誌以及設置伺服器id。我會使用vi文本編輯器,但你可以使用任何你喜歡的,例如nano,joe。

sudo vi /etc/my.cnf 

將下面的一些行寫到[mysqld]部分。

log-basename=master
log-bin
binlog-format=row
server_id=1

輸出如下:

mariadb 配置主節點

然後重啟 MariaDB:

sudo service mariadb restart

登錄到 MariaDB 並查看二進位日誌文件:

sudo mysql -u root -pq test_repl

mysql> SHOW MASTER STATUS;

輸出如下:

+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 |     3913 |              |                  |
+--------------------+----------+--------------+------------------+

記住 : "File" 和 "Position" 的值。在從節點中你需要使用這些值

創建用來複制的用戶

mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
mysql> flush privileges;

輸出如下:

Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

在資料庫中檢查用戶

mysql> select * from mysql.user WHERE user="replication_user"G;

輸出如下:

mysql> select * from mysql.user WHERE user="replication_user"G;
*************************** 1. row ***************************
Host: %
User: replication_user
Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
Select_priv: N
.....

從主節點創建 DB dump (將要被複制的所有數據的快照)

mysqldump -uroot -pSOME_ROOT_PASSWORD  test_repl > full-dump.sql

其中:

SOME_ROOT_PASSWORD - 你設置的root用戶的密碼
test_repl - 將要複製的資料庫的名稱;

你需要在從節點中恢復 mysql dump (full-dump.sql)。重複需要這個。

從節點配置

所有這些命令需要在從節點中進行。

假設我們已經更新/升級了包括有最新的MariaDB伺服器的 CentOS 7.x,而且你可以用root賬號登陸到MariaDB伺服器(這在這篇文章的第一部分已經介紹過)

登錄到Maria 資料庫控制台並創建資料庫

mysql -u root -pSOME_ROOT_PASSWORD;
mysql> create database test_repl;
mysql> exit;

在從節點恢復主節點的數據

mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql

其中:

full-dump.sql - 你在測試伺服器中創建的DB Dump。

登錄到Maria 資料庫並啟用複製

mysql> CHANGE MASTER TO
MASTER_HOST=&apos;82.196.5.39&apos;,
MASTER_USER=&apos;replication_user&apos;,
MASTER_PASSWORD=&apos;bigs3cret&apos;,
MASTER_PORT=3306,
MASTER_LOG_FILE=&apos;mariadb-bin.000002&apos;,
MASTER_LOG_POS=3913,
MASTER_CONNECT_RETRY=10;

mariadb 啟用複製

其中:

MASTER_HOST - 主節點伺服器的IP
MASTER_USER - 主節點伺服器中的複製用戶
MASTER_PASSWORD - 複製用戶密碼
MASTER_PORT - 主節點中的mysql埠
MASTER_LOG_FILE - 主節點中的二進位日誌文件名稱
MASTER_LOG_POS - 主節點中的二進位日誌文件位置

開啟從節點模式

mysql> slave start;

輸出如下:

Query OK, 0 rows affected (0.00 sec)

檢查從節點狀態

mysql> show slave statusG;

輸出如下:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 82.196.5.39
Master_User: replication_user
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 4175
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 793
Relay_Master_Log_File: mariadb-bin.000002
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: 4175
Relay_Log_Space: 1089
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
1 row in set (0.00 sec)

到這裡所有步驟都應該沒問題,也不應該出現錯誤。

測試複製

在主節點伺服器中添加一些條目到資料庫

mysql -u root -pSOME_ROOT_PASSWORD test_repl

mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6");
mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7");
mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8");

到從節點伺服器中查看複製數據

mysql -u root -pSOME_ROOT_PASSWORD test_repl

mysql> select * from Persons;

+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
...................
|        6 | LastName6 | FirstName6 | Address6 | City6 |
|        7 | LastName7 | FirstName7 | Address7 | City7 |
|        8 | LastName8 | FirstName8 | Address8 | City8 |
+----------+-----------+------------+----------+-------+

你可以看到數據已經被複制到從節點。這意味著複製能正常工作。希望你能喜歡這篇文章。如果你有任何問題請告訴我們。

via: http://linoxide.com/how-tos/configure-mariadb-replication-centos-linux/

作者:Bobbin Zachariah 譯者:ictlyh 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國