日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 复制方式_MySQL复制方法

發布時間:2025/3/11 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 复制方式_MySQL复制方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL的二進制日志,MySQL復制原理,MySQL主從模式搭建,MySQL雙主模式搭建,MySQL級聯模式搭建,MySQL半同步模式復制

一、二進制日志

1、概念

MySQL的二進制日志(binary log)是一個二進制文件,主要用于記錄修改數據或有可能引起數據變更的MySQL語句。二進制日志(binary log)中記錄了對MySQL數據庫執行更改的所有操作,并且記錄了語句發生時間、執行時長、操作數據等其它額外信息,但是它不記錄SELECT、SHOW等那些不修改數據的SQL語句。二進制日志(binary log)主要用于數據庫恢復和主從復制,以及審計(audit)操作。

2、二進制日志特點

1、記錄導致數據改變或潛在導致數據改變的SQL語句

2、記錄已提交的日志

3、不依賴于存儲引擎類型

4、可通過“重放”日志文件中的事件來生成數據副本

3、二進制日志相關的服務器變量

默認服務器變量配置文件為/etc/my.cnf,可以在此文件中設置相關變量的值

(1)、sql_log_bin=ON|OFF:是否記錄二進制日志,默認ON,所以不需要設置,可以在mysql運行的過程中通過修改變量參數來臨時關閉記錄二進制日志

mysql> set sql_log_bin=off

(2)、log_bin=/PATH/BIN_LOG_FILE:指定文件位置;默認OFF。要想開啟服務器的二進制日志功能必須設置此項,有兩種設置方式

log_bin

不指定文件的位置,會默認二進制日志默認放在mysql的datadir目錄中(不推薦)

log_bin=/data/mysql/logs/log_bin

指定文件的位置,生成的二進制文件就會在/data/mysql/logs/目錄中,二進制文件名為log_bin.000001, log_bin.000002以此類推。數據庫每次一重啟服務,就會生成一個新的二進制文件,編號以此類推

(3)、max_binlog_size=1073741824:單個二進制日志文件的最大體積(單位:字節),到達最大值會自動滾動,默認為1G

(4)、binlog_format=STATEMENT|ROW|MIXED:二進制日志記錄的格式,默認STATEMENT。建議設置為ROW,這樣刪除數據的時候不記錄刪除語句,而是刪除的行每條都記錄

4、二進制管理的語句

(1)、查看mariadb自行管理使用中的二進制日志文件列表,及大小,所有二進制日志

SHOW ?MASTER LOGS 或者 SHOW BINARY LOGS

(2)、查看使用中的二進制日志文件,當前正在使用的二進制日志

SHOW MASTER STATUS

(3)、查看二進制文件中的指定內容

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

示例:SHOW BINLOG EVENTS IN 'mariadb.000002' FROM 6516 LIMIT 2,3

(4)、清除指定二進制日志

PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }

示例:

PURGE BINARY LOGS TO ‘mariadb-bin.000003’; #不包括該文件

PURGE BINARY LOGS BEFORE '2017-01-23';

PURGE BINARY LOGS BEFORE '2017-03-22 09:25:30';

(5)、刪除所有二進制日志,index文件重新記數,慎重操作

RESET MASTER

(6)、切換日志文件:會生成新的二進制文件

FLUSH LOGS;

5、mysqlbinlog命令用法

mysqlbinlog二進制日志的客戶端命令工具

mysqlbinlog [OPTIONS] log_file…

--start-position=????? # 指定開始位置

--stop-position=?????? # 指定結束位置

--start-datetime=

--stop-datetime=

命令用法示例

# mysqlbinlog --start-position=6787 --stop-position=7527 /var/lib/mysql/mariadb-bin.000003 -v

# mysqlbinlog --start-datetime="2018-01-30 20:30:10" --stop-datetime="2018-01-30 20:35:22" mariadb-bin.000003 -vvv

二、MySQL復制原理

主節點Master:

1、dump 線程:當從節點通過I/O線程連接主節點時,主節點會創建一個dump 線程,用于發送bin-log的內容。在讀取bin-log中的操作時,此線程會對bin-log加鎖,當讀取完成,鎖會被釋放。

從節點Slave:

1、I/O 線程:當從節點上執行`start slave`命令之后,從節點會創建一個I/O線程用來連接主節點,請求主庫中更新的bin-log。I/O線程接收到主節點binlog dump 進程發來的更新之后,保存在本地中繼日志relay-log中。

2、SQL線程:從中繼日志中讀取日志事件,在本地完成重放

對于每一個主從連接,都需要三個進程來完成。當主節點有多個從節點時,主節點會為每一個當前連接的從節點建一個binary log dump 進程,而每個從節點都有自己的I/O進程,SQL進程。從節點用兩個線程將從主庫拉取更新和執行分成獨立的任務,這樣在執行同步數據任務的時候,不會降低讀操作的性能。比如,如果從節點沒有運行,此時I/O進程可以很快從主節點獲取更新,盡管SQL進程還沒有執行。如果在SQL進程執行之前從節點服務停止,至少I/O進程已經從主節點拉取到了最新的變更并且保存在本地relay日志中,當服務再次起來之后,就可以完成數據的同步。

三、主從同步方法

1、從0搭建主從模式

適用于項目未開始時,數據庫剛剛安裝完畢,沒有任何數據情況。

假設A服務器(192.168.1.100)為主數據庫,B服務器(192.168.1.200)為從數據庫

主節點A配置:

1、編輯mysql的配置文件/etc/my.cnf

[mysqld]

# 打開2進制日志選項

log_bin

# 配置server_id,要求主從必須不一樣,可以采用ip地址的尾號形式

server_id=100

2、登錄mysql數據庫,創建同步賬號

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.1.%' IDENTIFIED BY '123456';3、查看二進制日志的位置節點mysql >SHOW MASTER STATUS->;+--------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql.000002 | 402| | |

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

從節點B配置:

1、編輯mysql的配置文件/etc/my.cnf

[mysqld]

# 配置server_id,要求主從必須不一樣,可以采用ip地址的尾號形式

server_id=200

2、配置同步屬性

mysql>CHANGE MASTER TO

MASTER_HOST='192.168.1.200',

MASTER_USER='repluser',

MASTER_PASSWORD='123456',

MASTER_PORT=3306,

MASTER_LOG_FILE='mysql.000001',

MASTER_LOG_POS=402;3、打開同步進程

mysql>START SLAVE4、查看同步狀態

mysql> SHOW SLAVE STATUS

2、數據庫A上已有數據

此模式更為普遍,通常是原業務中已有單臺數據庫服務器,業務需要進行主從同步

假設A服務器(192.168.1.100)為主數據庫,B服務器(192.168.1.200)為從數據庫

主節點A配置:

1、編輯mysql的配置文件/etc/my.cnf

[mysqld]

# 打開2進制日志選項

log_bin

# 配置server_id,要求主從必須不一樣,可以采用ip地址的尾號形式

server_id=100

2、登錄mysql數據庫,創建同步賬號

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.1.%' IDENTIFIED BY '123456';

3、通過mysqldump導出數據庫

# mysqldump –uroot-A -F -E -R -x --master-data=1 --flush-privileges --triggers --default-character-set=utf8 --hex-blob >/tmp/backup.sql4、將備份的數據庫拷貝到B主機上# scp /tmp/backup.sql 192.168.1.200:/tmp

從節點B配置:

1、編輯mysql的配置文件/etc/my.cnf

[mysqld]

#配置server_id,要求主從必須不一樣,可以采用ip地址的尾號形式

server_id=200

2、啟動B主機的數據庫

# systemctl start mariadb3、導入已備份的數據庫

# mysql< /tmp/backup.sql4、查看備份到的位置less /tmp/backup.sql

。。。。省略。。。。

CHANGE MASTER TO MASTER_LOG_FILE='mysql.000003', MASTER_LOG_POS=245;

。。。。省略。。。。5、配置同步屬性

mysql>CHANGE MASTER TO

MASTER_HOST='192.168.1.200',

MASTER_USER='repluser',

MASTER_PASSWORD='123456',

MASTER_PORT=3306,

MASTER_LOG_FILE='mysql.000003',

MASTER_LOG_POS=245;6、打開同步進程

mysql> START SLAVE

四、雙主同步方法

建議從0開始配置

假設A服務器(192.168.1.100)為主數據庫,B服務器(192.168.1.200)為第二主數據庫

主節點A配置:

1、編輯mysql的配置文件/etc/my.cnf

[mysqld]

#打開2進制日志選項

log_bin

#配置server_id,要求主從必須不一樣,可以采用ip地址的尾號形式

server_id=100# 配置自增ID的起始點,和增長幅度

auto_increment_offset=1auto_increment_increment=2

2、登錄mysql數據庫,創建同步賬號

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.1.%' IDENTIFIED BY '123456';3、查看數據庫當前二進制位置,給B使用的

mysql>SHOW MASTER STATUS;+--------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

|mysql.000001| 407 | | |

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

4、配置同步屬性

注意:此處的日志位置是B通過SHOW MASTER STATUS查看到的日志位置

mysql>CHANGE MASTER TO

MASTER_HOST='192.168.1.200',

MASTER_USER='repluser',

MASTER_PASSWORD='123456',

MASTER_PORT=3306,

MASTER_LOG_FILE='mysql.000001',

MASTER_LOG_POS=407;5、打開同步進程

mysql> START SLAVE

另一主節點B配置:

1、編輯mysql的配置文件/etc/my.cnf

[mysqld]

#打開2進制日志選項

log_bin

#配置server_id,要求主從必須不一樣,可以采用ip地址的尾號形式

server_id=200# 配置自增ID的起始點,和增長幅度

auto_increment_offset=2auto_increment_increment=2

2、登錄mysql數據庫,創建同步賬號

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.1.%' IDENTIFIED BY '123456';3、查看數據庫當前二進制位置,給A使用的

mysql>SHOW MASTER STATUS;+--------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql.000001 | 407 | | |

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

4、配置同步屬性

注意:此處的日志位置是A通過SHOW MASTER STATUS查看到的日志位置

mysql>CHANGE MASTER TO

MASTER_HOST='192.168.1.100',

MASTER_USER='repluser',

MASTER_PASSWORD='123456',

MASTER_PORT=3306,

MASTER_LOG_FILE='mysql.000001',

MASTER_LOG_POS=407;5、打開同步進程

mysql> START SLAVE

5、級聯復制方法

級聯復制是將主庫的數據同步到級聯庫,然后級聯庫把自己的數據同步到從庫上,這樣可以減少主庫的壓力

主庫配置:

1、修改主庫配置文件

# vim/etc/my.cnf

server-id=100log-bin2、創建復制的用戶

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.1.%' IDENTIFIED BY '123456';3、將主庫的數據進行全備份

# mysqldump-A --single-transaction --master-data=1 -F > /data/all.sql4、把備份數據拷貝到從庫

#scp /data/all.sql 192.168.1.200:/data

級聯庫配置:

1、修改配置文件

# vim/etc/my.cnfserver-id=200

log-bin

# 將中繼日志同步到二進制日志中↓

log_slave_updates

2、修改主庫的的全備份文件,在文件的首頁

把 CHANGE MASTER TO MASTER_LOG_FILE='***', MASTER_LOG_POS=***;語句修改為如下。注意***的地方數據不變

# vim/data/all.sql

CHANGE MASTER TO

MASTER_HOST='192.168.1.100',

MASTER_USER='repluser',

MASTER_PASSWORD='123456',MASTER_PORT=3306,

MASTER_LOG_FILE='***', MASTER_LOG_POS=***;3、導入數據庫

mysql> source /date/all.sql4、刷新權限

mysql>FLUSH PRIVELEGES;5、開啟同步

mysql> start slave;

6、級聯庫數據進行全備份

mysqldump -A --single-transaction --master-data=1? -F > /data/all.sql

7、級聯庫數據拷貝到從庫1,和從庫2

scp /data/all.sql 192.168.1.201:/data

scp /data/all.sql 192.168.1.202:/data

從庫1配置:

1、修改配置文件

# vim/etc/my.cnf

server-id=201

2、修改級聯庫的全備份文件,在文件的首頁

把 CHANGE MASTER TO MASTER_LOG_FILE='***', MASTER_LOG_POS=***;語句修改為如下。注意***的地方數據不變

# vim/data/all.sql

CHANGE MASTER TO

MASTER_HOST='192.168.1.200',

MASTER_USER='repluser',

MASTER_PASSWORD='123456',MASTER_PORT=3306,

MASTER_LOG_FILE='***', MASTER_LOG_POS=***;3、導入數據庫

mysql> source /date/all.sql4、刷新權限

mysql>FLUSH PRIVELEGES;5、開啟同步

mysql> start slave;

從庫2配置與從庫1類似

6、半同步復制

默認情況下,MySQL的復制功能是異步的,異步復制可以提供最佳的性能,主庫把binlog日志發送給從庫即結束,并不驗證從庫是否接收完畢。這意味著當主庫或從庫發生故障時,有可能從庫沒有接收到主庫發送過來的binlog日志,這就會造成主庫和從庫的數據不一致,甚至在恢復時造成數據的丟失。

在開啟了半同步復制機制后,主庫只有當有任意一臺從庫已經接收到主庫的數據后,告訴主庫。主庫收到從庫同步成功的信息后,才繼續后面的操作。

主庫配置:

主數據庫A(192.168.1.100),從數據庫B(192.168.1.201),從數據庫B(192.168.1.202)

1、修改配置文件# vim /etc/my.cnf

[mysqld]

server-id=100

log-bin

2、創建同步用戶賬戶mysql>grant replication slave on *.* to repluser@'192.168.1.%' identified by '123456';

3、主庫全備份,并將備份數據傳送給從庫# mysqldump -A --single-transaction --master-data=1 -F > /data/all.sql

# scp /data/all.sql 192.168.1.201:/tmp

4、主庫安裝半同步模塊,并開啟該功能

mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

mysql>set global rpl_semi_sync_master_enabled=on;

可以放到服務器啟動參數里

# vim /etc/my.cnfrpl_semi_sync_master_enabled=1

5、半同步狀態查詢參考命令

mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';

mysql>SHOW GLOBAL STATUS LIKE '%semi%';

從庫B配置:

1、修改配置文件

# vim/etc/my.cnf

[mysqld]

server-id=201

2、修改主庫的的全備份文件,在文件的首頁

把 CHANGE MASTER TO MASTER_LOG_FILE='***', MASTER_LOG_POS=***;語句修改為如下。注意***的地方數據不變

# vim/data/all.sql

CHANGE MASTER TO

MASTER_HOST='192.168.1.100',

MASTER_USER='repluser',

MASTER_PASSWORD='123456',MASTER_PORT=3306,

MASTER_LOG_FILE='***', MASTER_LOG_POS=***;3、導入數據庫

mysql> source /date/all.sql4、刷新權限

mysql>FLUSH PRIVELEGES;5、從庫安裝半同步模塊(與主庫模塊不同,注意)

mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql>SET GLOBAL rpl_semi_sync_slave_enabled=1;

可以放到服務器啟動參數里

# vim/etc/my.cnf

rpl_semi_sync_slave_enabled=1

6、開啟主從同步

mysql>start slave;

從庫C配置類似

總結

以上是生活随笔為你收集整理的mysql 复制方式_MySQL复制方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。