Mysql數據備份恢復及主從同步


Mysql備份及主從同步

Mysql備份

1. mysqldump全量備份

1.1 mysqldump備份原理

mysqldump備份數據的過程,實際上就是把數據庫從mysql庫里以sql語句的形式直接輸出並保存成文件的過程,備份的文件/* 到 */都是注釋,其余都是sql語句,故備份恢復就相當於把所有sql語句執行一遍

1.2 msyqldump命令詳解

語法:mysqldump -u username -p 數據庫名 [表名]... > 文件路徑
常用選項:

  • -A 備份所有數據庫
  • -B DBNAME... #能接多個庫,並添加創建庫和切換庫的語句(使用-B備份的sql文件恢復時不需要指定庫,也不用手動創建庫)
  • -F 切割binlog
  • --master-data=1 #1表示執行從庫從主庫某位置的binlog恢復 ,2表示注釋執行語句
  • -x #鎖表
  • -d DBNAME #只備份表結構
  • --compact #輸出內容減少,用於調試
  • --no-create-info|-t #只備份數據
  • --single-transaction # 適合innodb事務數據庫備份

1.2 mysqldump備份示例

1.備份所有庫並壓縮

mysqldump -u root -p -A   > xx.sql

2.備份某個庫

mysqldump -u root -p -B DBNAME > xx.sql

3.備份多個庫

mysqldump -u root -p -B DBNAME1 DBNAME2 > xx.sql

1.3 備份恢復

mysql -uroot -p  < xxx.sql

2.log_bin增量備份

2.1 開啟log_bin功能

修改my.cnf中的[mysqld]:

#添加該選項
[mysqld]
log_bin=mysqlbin

生成的日志文件存放的是該功能開啟后的mysql內部增刪改等對數據庫有更新內容的sql語句。

該功能開啟前的數據並不能通過這個恢復。所以通常先是使用mysqldump全量備份,之后的數據通過log_bin生成的日志文件來恢復

若在mysqldump備份時指定了--master-data=1,會將備份數據最后的位置記錄下來,則數據恢復時將大大方便log_bin從合理的位置恢復

2.2 利用mysqlbinlog命令導出sql文件

mysqlbinlog  mysql-bin.00001 > 1.sql
#-d DB #只導出指定庫sql語句,默認binlog會保存所有庫的操作
mysqlbinlog -d test mysql-bin.00001  > 1.sql

基於指定位置導出sql語句:

mysqlbinlog mysqlbin.00001 --start-position=106 >1.sql #導出從位置106開始到文件結束的sql語句
mysqlbinlog mysqlbin.00001 --stop-position=500 >2.sql #導出從文件開始到位置為500處的sql語句
mysqlbinlog mysqlbin.00001 --start-position=106 --stop-position=500 >3.sql #導出從位置106到500的sql語句

基於指定時間導出:

mysqlbinlog --start-datetime="2019-02-22 16:52:06" mysqlbin.000001 > 1.sql 
mysqlbinlog --stop-datetime="2019-02-22 16:52:06" mysqlbin.000001 > 2.sql
mysqlbinlog --start-datetime="2019-02-22 16:52:06" --stop-datetime="2019-02-22 17:52:06" mysqlbin.000001 > 3.sql

2.3 備份恢復

mysql -uroot -p  < 1.sql #通常先將全量備份的數據恢復,然后用msyqlbinlog導出的文件接着全量的恢復后面的數據

Mysql主從同步配置

1.1主從同步過程

  • 1.從庫IO線程連接上主庫,並請求從指定日志文件的指定位置之后的日志內容
  • 2.主庫收到來自從庫的請求后,負責復制的IO線程根據請求信息讀取指定日志指定位置之后的日志內容,並返回給從庫的IO線程
  • 3.從庫接收到信息后,將接收到的內容依次寫到從庫的Relaylog文件的最末端,並讀取其中主庫的bin-log文件名和位置記錄到master-info文件中,以便下次讀取時能清楚的告訴主庫"我需要從bin-log文件的哪個位置開始往后的內容"
  • 4.從庫的SQL線程檢測到Relaylog中新增的內容后,會馬上解析該文件中的內容,形成SQL語句並執行,從而完成同步

1.2 配置

主庫配置

  • 1.主庫開啟log_bin 功能,並設置server_id
[mysqld]
server_id=1111
log_bin=mysqlbin
  • 2.主庫創建主從同步的mysql賬號,並授予replication,slave權限
mysql -e "GRANT replication slave  *.* to 'repl'@'192.168.139.0/255.255.255.0' identified by 'repl'" -uroot -p
  • 3.主庫整庫鎖表,然后備份已有數據生成sql文件,並拷貝至從庫服務器,完成后解鎖主庫
mysql -e " flush table with read lock " -uroot -p123456
mysqldump -uroot -p123456 -A --master-data=1 > repl.sql 
scp  repl.sql   root@192.168.139.106:~
mysql -e " unlock   tables " -uroot -p123456

從庫配置

  • 1.設置server_id, 從庫一般不需要開啟log_bin功能,除非做級聯,即同時還作為其他庫的主庫
[mysqld]
server_id=2222 #需要跟主庫不一致
  • 2.先手動復制主庫的數據到從庫
mysql -uroot -p123456 < repl.sql
  • 3.如果主庫配置第三步中,備份數據時沒有指定--master-data=1 ,則需要在從庫中指定主庫信息
mysql -e  "change master to \
master_host='192.168.139.105', \
master_log_file='mysqlbin.000004',\
master_user='repl',master_password='repl',\
master_log_pos=326 "
  • 4.從庫開啟同步開關
mysql -uroot -p123456 -e " start slave;" 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM