Mysql(Mariadb)資料庫主從複製

2021-01-09 流氓兔說娛樂

Mysql主從複製的實現原理圖大致如下:

MySQL之間數據複製的基礎是以二進位日誌文件(binary log file)來實現的,一臺MySQL資料庫一旦啟用二進位日誌後,其作為master,它資料庫中所有操作都會以「事件」的方式記錄在二進位日誌中,其他資料庫作為slave通過一個I/O線程與主伺服器保持通信,並監控master的二進位日誌文件的變化,如果發現master二進位日誌文件發生變化,則會把變化複製到自己的中繼日誌中,然後slave的一個SQL線程會把相關的「事件」執行到自己的資料庫中,以此實現從資料庫和主資料庫的一致性,也就實現了主從複製。MySQL(MariaDB)具體詳細的安裝可以參考《Linux就該這麼學》教程的第十八章節,裡面內容寫的非常詳細,適合初學者,本文也比較適合企業應用。

實現MySQL主從複製配置要求:

主伺服器:1、開啟資料庫二進位日誌功能;2、配置資料庫認證唯一服務id;3、獲得主庫的二進位日誌文件名及位置;4、在主庫上面創建一個用於主庫和從庫通信的用戶帳號,安全管理。

從伺服器:1、在從庫中配置唯一服務id;2、使用主庫創建分配的用戶帳號讀取主庫的二進位日誌;3、啟用slave功能,用於主從通信。

一、準備工作:

1.主從資料庫版本最好一致;

2.主從資料庫內數據保持一致;

主資料庫(master):192.168.3.91 /CentOS Linux release 7.5.1804 (Core)

從資料庫( slave ) :192.168.3.218 /CentOS Linux release 7.5.1804 (Core)

注意:這裡的主從都是通過yum源安裝的mariadb 5.5.56;

# yum install mariadb-server.x86_64 mariadb.x86_64 -y

//設置mariadb服務

# systemctl start mariadb.service && systemctl enable mariadb.service

//設置mariadb資料庫root帳號的密碼,默認root用戶是沒有密碼;

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current

password for the root user. If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

Set root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them. This is intended only for testing, and to make the installation

go a bit smoother. You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n] y

... Success!

Normally, root should only be allowed to connect from 'localhost'. This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n

... skipping.

By default, MariaDB comes with a database named 'test' that anyone can

access. This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] n

... skipping.

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n] y

... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

二、主資料庫master修改:

1.修改mysql配置

找到主資料庫的配置文件my.cnf(或者my.ini),我的在/etc/my.cnf,在[mysqld]部分插入如下兩行:

# find / -name my.cnf

默認配置

[mysqld]log-bin=mysql-bin #開啟二進位日誌 server-id=1 #設置server-id

log-bin="/var/lib/mysql/" #設定生成的log文件名;

修改後:

# systemctl restart mariadb.service

2.重啟mysql,創建用於同步的用戶帳號

# mysql -hlocalhost -uroot -ppassword

創建用戶並授權:用戶:wxp,密碼:password

MariaDB [(none)]> CREATE USER 'wxp'@'192.168.3.218' IDENTIFIED BY 'password';#創建用戶

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'wxp'@'192.168.3.218';#分配權限

MariaDB [(none)]>flush privileges; #刷新權限

3.查看master狀態,記錄二進位文件名(mysql-bin.000001)和位置(492):

MariaDB [(none)]> SHOW MASTER STATUS;

+---++----+---+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---++----+---+

| mysql-bin.000001 | 492 | | |

+---++----+---+

1 row in set (0.00 sec)

二、從伺服器slave修改:

1.修改mysql配置

同樣找到my.cnf配置文件,添加server-id

# find / -name my.cnf

my.cnf默認配置

[mysqld]server-id=2 #設置server-id,必須唯一

log-bin="/var/lib/mysql/" #設定生成的log文件名;

修改後:

# systemctl restart mariadb.service

2.重啟mysql,打開mysql會話,執行同步SQL語句(需要主伺服器主機名,登陸憑據,二進位文件的名稱和位置):

# mysql -hlocalhost -uroot -ppassword

MariaDB [(none)]> CHANGE MASTER TO -> MASTER_HOST='192.168.3.91', -> MASTER_USER='wxp', -> MASTER_PASSWORD='password', -> MASTER_LOG_FILE='mysql-bin.000001', -> MASTER_LOG_POS=492;

這裡是直接把信息寫入到資料庫裡面,

mysql> select * from mysql.slave_master_info \G

3.啟動slave同步進程:

MariaDB [(none)]>start slave;

4.查看slave狀態:

MariaDB [(none)]> show slave status\G;

MariaDB [(none)]> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.3.91

Master_User: wxp

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 492

Relay_Log_File: mariadb-relay-bin.000002

Relay_Log_Pos: 529

Relay_Master_Log_File: mysql-bin.000001

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: 492

Relay_Log_Space: 825

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)

ERROR: No query specified

當Slave_IO_Running和Slave_SQL_Running都為YES的時候就表示主從同步設置成功了。接下來就可以進行一些驗證了,比如在主master資料庫的test資料庫的一張表中插入一條數據,在slave的test庫的相同數據表中查看是否有新增的數據即可驗證主從複製功能是否有效,還可以關閉slave(MariaDB [(none)]>stop slave;),然後再修改master,看slave是否也相應修改(停止slave後,master的修改不會同步到slave),就可以完成主從複製功能的驗證了。

5、測試,操作Master資料庫

MariaDB [(none)]> use test;

Database changed

MariaDB [test]> create table t1(Name varchar(18));

Query OK, 0 rows affected (0.03 sec)

MariaDB [test]> insert into t1(Name) values('wxp');

Query OK, 1 row affected (0.01 sec)

MariaDB [test]> select * from t1;

+-+

| Name |

+-+

| wxp |

+-+

1 row in set (0.00 sec)

在slave上面查看test庫是否有數據同步過來;

[root@backup-3-218 ~]# mysql -hlocalhost -uroot -ppassword

MariaDB [(none)]> use test;

MariaDB [test]> show tables;

+-+

| Tables_in_test |

+-+

| t1 |

+-+

1 row in set (0.00 sec)

MariaDB [test]> select * from t1;

+-+

| Name |

+-+

| wxp |

+-+

1 row in set (0.00 sec)

6、還可以用到的其他相關參數:

master開啟二進位日誌後默認記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的資料庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項:

# 不同步哪些資料庫

# vim /etc/my.cnf binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema

# systemctl restart mariadb.service

# 只同步哪些資料庫,除此之外,其他不同步 binlog-do-db = wxp

# 日誌保留時間

expire_logs_days = 10

# 控制binlog的寫入頻率。每執行多少次事務寫入一次

# 這個參數性能消耗很大,但可減小MySQL崩潰造成的損失

sync_binlog = 5

# 日誌格式,建議mixed

# statement 保存SQL語句

# row 保存影響記錄數據

# mixed 前面兩種的結合

binlog_format = mixed

在slave資料庫上面操作,設置重新連接超時時間

# 停止主從同步

mysql> stop slave;

# 連接斷開時,重新連接超時時間

mysql> change master to master_connect_retry=50;

# 開啟主從同步

mysql> start slave;

相關焦點

  • Windows安裝MariaDB-10.5.5資料庫
    在之前其實也用過很多資料庫,但是都是收費的,比如MSSQL、Oracle、DB2、GBase等,反正接觸得比較多,但是現在自己要做一些東西的時候,就像用免費的,這不,就盯上MariaDB和PostgreSQL了。我們先來看看今年常用資料庫的一個排行吧可以看到,MySQL還是佔領著重要的位置,那麼我為什麼還是要用MariaDB呢?
  • Centos7.9安裝Mariadb資料庫
    MariaDB 資料庫管理系統是 MySQL 的一個分支,主要由開源社區在維護,採用 GPL 授權許可。開發這個分支的原因之一是:甲骨文公司收購了 MySQL 後,有將 MySQL 閉源的潛在風險,因此社區採用分支的方式來避開這個風險。MariaDB完全兼容mysql。
  • 高性能Mysql主從架構的複製原理及配置詳解
    主從複製配置有兩臺MySQL資料庫伺服器Master和slave,Master為主伺服器,slave為從伺服器,初始狀態時,Master和slave中的數據信息相同,當Master中的數據發生變化時,slave也跟著發生相應的變化,使得master和slave的數據信息同步,達到備份的目的。
  • mysql/mariadb資料庫在查詢結果中再次查詢篩選的操作方法
    今天是2020年4月9日,我跟大家分享一個二次操作mysql資料庫查詢結果的方法.我以資料庫 mariadb為例進行說明.因為它有個heidiSQL圖形管理工具,比較好操作.資料庫 mariadb為例進行說明.因為它有個heidiSQL圖形管理工具,比較好操作.
  • Qt5如何備份mariaDB資料庫
    資料庫對比Mariadb是mysql的分支,所以說qt如何使用mysql,那麼就如何使用mariadb了。以前備份資料庫都是用資料庫管理軟體。那該如何在應用軟體中備份資料庫呢?這裡我是用資料庫自帶的命令:mysqldump.
  • mysql,mariadb 啟動出現 Can't Create Test File錯誤
    樹莓派系統安裝mariadb通過sudo apt install 安裝後,服務正常啟動,但默認的數據目錄是 /var/lib/mysql,所以修改數據目錄和日誌目錄,方便維護。新的數據目錄:/home/mysql/data,新日誌目錄 /home/mysql/log啟動服務時出現警告提示:[Warning] Can't create test file /home/mysql/data/club-wilspark-rb.lower-test一番搜索,在Mariadb官方網站發現了解決方案:解釋一下:
  • CentOS 7 安裝 MariaDB及基礎配置
    CentOS 7 安裝 MariaDB一、使用yum命令直接安裝[root@localhost ~]# yum install mariadb-server二、開啟服務[root@localhost ~]# systemctl start mariadb三、設置為開機自啟動服務[root@localhost
  • python3.8操作(插入,刪除)mysql/MariaDB資料庫
    01主題大家好,我是義縣遊學電子科技.今天來跟大家說一個工作中常用到的操作,python3.8操作MariaDB資料庫.因為MariaDB屬於mysql分支因此資料庫命令語句都是通用的非常方便.= mysql.connector.connect(host="localhost", # 資料庫主機地址user="root", # 資料庫用戶名passwd="root", # 資料庫密碼database="test1" #資料庫名)mycursor = mydb.cursor()a=0while True:time.sleep(1)try:# 查詢資料庫的表格table1mycursor.execute
  • 實踐分享:ACCESS資料庫導入mysql資料庫
    作為程式設計師很多時候要進行不同資料庫之間的導入導出工作,這樣是為了節省數據錄入的時間。下面我就和大家分享一下如何把數據從ACCESS資料庫導入mysql資料庫。首先說明一下思路,可以導入mysql的方法有很多,但不包過access直接導入,網上有很多介紹CSV格式導入mysql的,但操作很不方便,經常發生錯誤而無法導入。sql語句導入是最簡單的。那有沒有辦法把access資料庫轉換成sql語句呢。
  • MySQL 數據校驗工具-愛可生|mysql|perl|伺服器|node01_網易訂閱
    其原理是在主庫執行基於 statement 的 SQL 語句來生成主庫數據塊的checksum,把相同的 SQL 語句傳遞到從庫執行,並在從庫上計算相同數據塊的 checksum,最後,比較主從庫上相同數據塊的 checksum 值,由此判斷主從數據是否一致。它能在非常大的表上工作的一個原因是,它把每個表分成行塊,並檢查每個塊與單個替換。選擇查詢。它改變塊的大小,使校驗和查詢在所需的時間內運行。
  • 將mysql數據導入access資料庫
    mysql資料庫表sqltable 欄位id,name,sex,email access資料庫表accesstable id,name,sex,email ?
  • mysql 版本號解釋_mysql workbench查詢mysql版本號 - CSDN
    在設計資料庫結構的時候,要儘量遵守三範式,如果不遵守,必須有足夠的理由。比如性能。事實上我們經常會為了性能而妥協資料庫的設計。mysql有關權限的表都有哪幾個MySQL伺服器通過權限表來控制用戶對資料庫的訪問,權限表存放在mysql資料庫裡,由mysql_install_db腳本初始化。
  • 字節內部「MySQL性能優化寶典」意外流出!極致經典,堪稱資料庫的...
    第7章MysQL主從複製詳解  MySQL的主從複製功能是構建基於MySQL資料庫的高可用、高性能的應用程式基礎,既能用於分擔主資料庫的讀負載,也為高可用HA主從複製是指數據可以從一個MySQL資料庫伺服器主節點複製到另外一個或多個MySQL資料庫伺服器從節點。主從複製可以用於數據實時備份、讀寫分離、高可用HA等企業場景中。
  • eclipse如何使用JDBC連接mysql資料庫
    eclipse如何使用JDBC連接mysql資料庫1.在新建的Project中右鍵新建Floder2.創建名為lib的包3.創建完畢之後的工程目錄4.接下來解壓你下載的mysql的jar包,拷貝其中的.jar文件5.在工程lib
  • 如何在ubuntu20.04安裝MySQL並修改資料庫密碼
    sudo apt install mysql-client-core-83、再次輸入mysql命令,提示不能連接上mysql server,由提示可知mysql服務端沒有安裝;輸入命令sudo apt-get
  • 0064 關係資料庫的概念和安裝使用MySQL
    樹莓派系統下安裝MySQL資料庫服務軟體打開「LX終端」程序,運行以下命令:sudo apt-get install mysql-server mysql-client當中需要輸入root用戶的密碼。為了讓PHP支持MySQL資料庫,需要運行以下命令:sudo apt-get install php5-mysql然後重啟樹莓派系統。Ubuntu系統下安裝MySQL資料庫服務軟體Ubuntu系統下的安裝方式和樹莓派系統完全一樣。
  • DTCC:MySQl核心代碼開發經驗揭示
    【IT168資訊】由IT168(ITPUB、IXPUB、ChinaUnix)主辦的2012中國資料庫技術大會(DTCC)於(以下簡稱大會)2012年4月13日~15日在北京永泰福朋喜來登大酒店隆重召開。大會將針對大數據架構設計、資料庫安全、分布式資料庫、商業智能、NoSQL、Hadoop等多個重點話題進行深入探討。
  • 基於MySQL資料庫應用開發實現嵌入式數控系統的設計
    具體創建過程如下: % mysql –uroot mysql; //進入資料庫 mysql》 SET PASSWORD=PASSWORD(『lyw00001』); //為根用戶分配一個口令 mysql》 CREATE DATABASE work ; //創建work資料庫 mysql》 GRANT ALL ON work.* to lyw@localhost
  • MySQL資料庫常見的出錯代碼及出錯信息
    本文介紹的MySQL資料庫的出錯代碼表,依據MySQL資料庫頭文件mysql/include/mysqld_error.h整理而成。詳細內容請大家參考下文: 1005:創建表失敗 1006:創建資料庫失敗 1007:資料庫已存在,創建資料庫失敗 1008:資料庫不存在,刪除資料庫失敗 1009:不能刪除資料庫文件導致刪除資料庫失敗 1010:不能刪除數據目錄導致刪除資料庫失敗 1011:刪除資料庫文件失敗 1012:不能讀取系統表中的記錄
  • 大數據挖掘——(六):MySql資料庫
    mysql資料庫MySQL 是最流行的關係型資料庫管理系統,在WEB應用方面 MySQL 是最好的RDBMS(Relational Database Management System:關係資料庫管理系統)應用軟體之一,MySQL 是開源的,並且支持多種語言,包括C、C++、Python、Java、