這篇文章主要介紹“MySQL數(shù)據(jù)庫主從復(fù)制的實現(xiàn)原理”,在日常操作中,相信很多人在Mysql數(shù)據(jù)庫主從復(fù)制的實現(xiàn)原理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mysql數(shù)據(jù)庫主從復(fù)制的實現(xiàn)原理”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站長期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為林周企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作,林周網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
Mysql主從復(fù)制的實現(xiàn)原理圖大致如下:
MySQL之間數(shù)據(jù)復(fù)制的基礎(chǔ)是以二進制日志文件(binary log file)來實現(xiàn)的,一臺MySQL數(shù)據(jù)庫一旦啟用二進制日志后,其作為master,它數(shù)據(jù)庫中所有操作都會以“事件”的方式記錄在二進制日志中,其他數(shù)據(jù)庫作為slave通過一個I/O線程與主服務(wù)器保持通信,并監(jiān)控master的二進制日志文件的變化,如果發(fā)現(xiàn)master二進制日志文件發(fā)生變化,則會把變化復(fù)制到自己的中繼日志中,然后slave的一個SQL線程會把相關(guān)的“事件”執(zhí)行到自己的數(shù)據(jù)庫中,以此實現(xiàn)從數(shù)據(jù)庫和主數(shù)據(jù)庫的一致性,也就實現(xiàn)了主從復(fù)制。
實現(xiàn)MySQL主從復(fù)制配置要求:
主服務(wù)器:1、開啟數(shù)據(jù)庫二進制日志功能;2、配置數(shù)據(jù)庫認證唯一服務(wù)id;3、獲得主庫的二進制日志文件名及位置;4、在主庫上面創(chuàng)建一個用于主庫和從庫通信的用戶賬號 ,安全管理。
從服務(wù)器: 1、在從庫中配置唯一 服務(wù)id;2、使用主庫創(chuàng)建分配的用戶賬號讀取主庫的二進制日志 ;3、啟用slave功能,用于主從通信。
一、準備工作:
1.主從數(shù)據(jù)庫版本最好一致;
2.主從數(shù)據(jù)庫內(nèi)數(shù)據(jù)保持一致;
主數(shù)據(jù)庫(master):192.168.3.91 /CentOS Linux release 7.5.1804 (Core)
從數(shù)據(jù)庫( 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
//設(shè)置mariadb服務(wù)
# systemctl start mariadb.service && systemctl enable mariadb.service
//設(shè)置mariadb數(shù)據(jù)庫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!
二、主數(shù)據(jù)庫master修改:
1.修改mysql配置
找到主數(shù)據(jù)庫的配置文件my.cnf(或者my.ini),我的在/etc/my.cnf,在[mysqld]部分插入如下兩行:
# find / -name my.cnf
默認配置
[mysqld]log-bin=mysql-bin #開啟二進制日志 server-id=1 #設(shè)置server-id
log-bin="/var/lib/mysql/" #設(shè)定生成的log文件名;
修改后:
# systemctl restart mariadb.service
2.重啟mysql,創(chuàng)建用于同步的用戶賬號
# mysql -hlocalhost -uroot -ppassword
創(chuàng)建用戶并授權(quán):用戶:wxp,密碼:password
MariaDB [(none)]> CREATE USER 'wxp'@'192.168.3.218' IDENTIFIED BY 'password';#創(chuàng)建用戶
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'wxp'@'192.168.3.218';#分配權(quán)限
MariaDB [(none)]>flush privileges; #刷新權(quán)限
3.查看master狀態(tài),記錄二進制文件名(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)
二、從服務(wù)器slave修改:
1.修改mysql配置
同樣找到my.cnf配置文件,添加server-id
# find / -name my.cnf
my.cnf默認配置
[mysqld]server-id=2 #設(shè)置server-id,必須唯一
log-bin="/var/lib/mysql/" #設(shè)定生成的log文件名;
修改后:
# systemctl restart mariadb.service
2.重啟mysql,打開mysql會話,執(zhí)行同步SQL語句(需要主服務(wù)器主機名,登陸憑據(jù),二進制文件的名稱和位置):
# 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;
這里是直接把信息寫入到數(shù)據(jù)庫里面,
mysql> select * from mysql.slave_master_info \G
3.啟動slave同步進程:
MariaDB [(none)]>start slave;
4.查看slave狀態(tài):
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的時候就表示主從同步設(shè)置成功了。接下來就可以進行一些驗證了,比如在主master數(shù)據(jù)庫的test數(shù)據(jù)庫的一張表中插入一條數(shù)據(jù),在slave的test庫的相同數(shù)據(jù)表中查看是否有新增的數(shù)據(jù)即可驗證主從復(fù)制功能是否有效,還可以關(guān)閉slave(MariaDB [(none)]>stop slave;),然后再修改master,看slave是否也相應(yīng)修改(停止slave后,master的修改不會同步到slave),就可以完成主從復(fù)制功能的驗證了。
5、測試,操作Master數(shù)據(jù)庫
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庫是否有數(shù)據(jù)同步過來;
[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、還可以用到的其他相關(guān)參數(shù):
master開啟二進制日志后默認記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的數(shù)據(jù)庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項:
# 不同步哪些數(shù)據(jù)庫
# vim /etc/my.cnf binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema
# systemctl restart mariadb.service
# 只同步哪些數(shù)據(jù)庫,除此之外,其他不同步 binlog-do-db = wxp
# 日志保留時間
expire_logs_days = 10
# 控制binlog的寫入頻率。每執(zhí)行多少次事務(wù)寫入一次
# 這個參數(shù)性能消耗很大,但可減小MySQL崩潰造成的損失
sync_binlog = 5
# 日志格式,建議mixed
# statement 保存SQL語句
# row 保存影響記錄數(shù)據(jù)
# mixed 前面兩種的結(jié)合
binlog_format = mixed
在slave數(shù)據(jù)庫上面操作,設(shè)置重新連接超時時間
# 停止主從同步
mysql> stop slave;
# 連接斷開時,重新連接超時時間
mysql> change master to master_connect_retry=50;
# 開啟主從同步
mysql> start slave;
到此,關(guān)于“Mysql數(shù)據(jù)庫主從復(fù)制的實現(xiàn)原理”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)頁標題:Mysql數(shù)據(jù)庫主從復(fù)制的實現(xiàn)原理
網(wǎng)站網(wǎng)址:http://aaarwkj.com/article40/isgjeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、用戶體驗、網(wǎng)站導(dǎo)航、域名注冊、云服務(wù)器、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)