如何在 CentOS Linux 中配置 MariaDB 複製
這是一個建立資料庫重複版本的過程。複製過程不僅僅是複製一個資料庫,同時也包括從主節點到一個從節點的更改同步。但這並不意味著從資料庫就是和主資料庫完全相同的副本,因為複製可以配置為只複製表結構、行或者列,這叫做區域性複製。複製保證了特定的配置物件在不同的資料庫之間保持一致。
Mariadb 複製概念
備份 :複製可以用來進行資料庫備份。例如,當你做了主->從複製。如果主節點資料丟失(比如硬碟損壞),你可以從從節點中恢復你的資料庫。
擴充套件 :你可以使用主->從複製作為擴充套件解決方案。例如,如果你有一些大的資料庫以及SQL查詢,使用複製你可以將這些查詢分離到每個複製節點。寫入操作的SQL應該只在主節點進行,而只讀查詢可以在從節點上進行。
分發解決方案 :你可以用複製來進行分發。例如,你可以將不同的銷售資料分發到不同的資料庫。
故障解決方案 : 假如你建立有主節點->從節點1->從節點2->從節點3的複製結構。你可以為主節點寫指令碼監控,如果主節點出故障了,指令碼可以快速的將從節點1切換為新的主節點,這樣複製結構變成了主節點->從節點1->從節點2,你的應用可以繼續工作而不會停機。
複製的簡單圖解示範
開始之前,你應該知道什麼是二進位制日誌檔案以及 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
這裡 SOME_ROOT_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:
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='82.196.5.39', MASTER_USER='replication_user', MASTER_PASSWORD='bigs3cret', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=3913, MASTER_CONNECT_RETRY=10;
其中:
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 status\G;
輸出如下:
*************************** 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 | +----------+-----------+------------+----------+-------+
你可以看到資料已經被複制到從節點。這意味著複製能正常工作。希望你能喜歡這篇文章。如果你有任何問題請告訴我們。
相關文章
- 如何在Linux中複製文件Linux
- Mariadb之半同步複製叢集配置
- MariaDB GTID 複製同步
- 如何在Linux中執行MySQL/MariaDB查詢LinuxMySql
- 如何設定 MariaDB 主主複製
- mysql for linux 配置主從複製MySqlLinux
- Mysql(Mariadb)資料庫主從複製MySql資料庫
- 在 Linux 中複製文件Linux
- CentOS7.3 安裝配置 Nginx、MariaDB、PHPCentOSNginxPHP
- Linux下配置MySQL主從複製LinuxMySql
- mysql複製--主從複製配置MySql
- centos7上配置mysql8的主從複製CentOSMySql
- 如何在Linux下編譯安裝MariaDBLinux編譯
- 如何在 Linux 上安裝 MariaDB 或 MySQLLinuxMySql
- 如何在CentOS 7中安裝和配置OrientDB社群版CentOS
- MySQL 8 複製(五)——配置GTID複製MySql
- CentOS6.4系統MySQL主從複製基本配置實踐CentOSMySql
- 在Linux中,如何在Linux中安裝和配置KVM?Linux
- Postgres 流複製配置
- mariadb-2-在centos中修改mariadb資料的儲存路徑CentOS
- MySQL 8 複製(九)——組複製聯機配置MySql
- GoldenGate單向複製配置(支援DDL複製)Go
- 配置mysql5.5主從複製、半同步複製、主主複製MySql
- Linux 中複製和移動檔案Linux
- PostGreSql 12.6 的流複製(CentOS)SQLCentOS
- mysql主主複製(雙主複製)配置步驟MySql
- linux零複製Linux
- MySql 主從複製配置MySql
- 為Oracle配置DDL複製Oracle
- goldengate配置DDL複製Go
- MySQL主從複製配置MySql
- 在CentOS7上配置MySQL的主從複製模式(Master-SlaveReplication)CentOSMySql模式AST
- 如何在 CentOS 7.0 上配置 Ceph 儲存CentOS
- JavaScript中的淺複製與深複製JavaScript
- MYSQL主從複製製作配置方案MySql
- 【轉載】如何在Oracle中複製表結構和表資料Oracle
- Oracle Linux 7.1中安裝MariadbOracleLinux
- ogg中抽取或複製程式(extract or replicat)中表的的重複配置