中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql數據庫主從復制的實現原理

發布時間:2021-08-26 17:01:42 來源:億速云 閱讀:224 作者:chen 欄目:MySQL數據庫

這篇文章主要介紹“Mysql數據庫主從復制的實現原理”,在日常操作中,相信很多人在Mysql數據庫主從復制的實現原理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Mysql數據庫主從復制的實現原理”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Mysql主從復制的實現原理圖大致如下:

 Mysql數據庫主從復制的實現原理

MySQL之間數據復制的基礎是以二進制日志文件(binary log file)來實現的,一臺MySQL數據庫一旦啟用二進制日志后,其作為master,它數據庫中所有操作都會以“事件”的方式記錄在二進制日志中,其他數據庫作為slave通過一個I/O線程與主服務器保持通信,并監控master的二進制日志文件的變化,如果發現master二進制日志文件發生變化,則會把變化復制到自己的中繼日志中,然后slave的一個SQL線程會把相關的“事件”執行到自己的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從復制。

實現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;

到此,關于“Mysql數據庫主從復制的實現原理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台州市| 洪洞县| 贵州省| 辽阳市| 江北区| 大田县| 安阳市| 高碑店市| 万载县| 化州市| 三江| 和田县| 山东省| 吉安市| 康保县| 林芝县| 沐川县| 青冈县| 聂拉木县| 祁阳县| 旅游| 宾阳县| 巴林右旗| 登封市| 罗城| 乐至县| 侯马市| 武穴市| 繁峙县| 毕节市| 浙江省| 浮山县| 大邑县| 依兰县| 府谷县| 温泉县| 攀枝花市| 石狮市| 桐梓县| 扶余县| 巴彦淖尔市|