Mysql数据备份恢复及主从同步
目錄
- Mysql備份及主從同步
- Mysql備份
- 1. mysqldump全量備份
- 2.log_bin增量備份
- Mysql主從同步配置
- 1.1主從同步過程
- 1.2 配置
- Mysql備份
Mysql備份及主從同步
Mysql備份
1. mysqldump全量備份
1.1 mysqldump備份原理
mysqldump備份數(shù)據(jù)的過程,實(shí)際上就是把數(shù)據(jù)庫從mysql庫里以sql語句的形式直接輸出并保存成文件的過程,備份的文件/* 到 */都是注釋,其余都是sql語句,故備份恢復(fù)就相當(dāng)于把所有sql語句執(zhí)行一遍
1.2 msyqldump命令詳解
語法:mysqldump -u username -p 數(shù)據(jù)庫名 [表名]... > 文件路徑
常用選項(xiàng):
- -A 備份所有數(shù)據(jù)庫
- -B DBNAME... #能接多個庫,并添加創(chuàng)建庫和切換庫的語句(使用-B備份的sql文件恢復(fù)時不需要指定庫,也不用手動創(chuàng)建庫)
- -F 切割binlog
- --master-data=1 #1表示執(zhí)行從庫從主庫某位置的binlog恢復(fù) ,2表示注釋執(zhí)行語句
- -x #鎖表
- -d DBNAME #只備份表結(jié)構(gòu)
- --compact #輸出內(nèi)容減少,用于調(diào)試
- --no-create-info|-t #只備份數(shù)據(jù)
- --single-transaction # 適合innodb事務(wù)數(shù)據(jù)庫備份
1.2 mysqldump備份示例
1.備份所有庫并壓縮
mysqldump -u root -p -A > xx.sql2.備份某個庫
mysqldump -u root -p -B DBNAME > xx.sql3.備份多個庫
mysqldump -u root -p -B DBNAME1 DBNAME2 > xx.sql1.3 備份恢復(fù)
mysql -uroot -p < xxx.sql2.log_bin增量備份
2.1 開啟log_bin功能
修改my.cnf中的[mysqld]:
#添加該選項(xiàng) [mysqld] log_bin=mysqlbin生成的日志文件存放的是該功能開啟后的mysql內(nèi)部增刪改等對數(shù)據(jù)庫有更新內(nèi)容的sql語句。
該功能開啟前的數(shù)據(jù)并不能通過這個恢復(fù)。所以通常先是使用mysqldump全量備份,之后的數(shù)據(jù)通過log_bin生成的日志文件來恢復(fù)
若在mysqldump備份時指定了--master-data=1,會將備份數(shù)據(jù)最后的位置記錄下來,則數(shù)據(jù)恢復(fù)時將大大方便log_bin從合理的位置恢復(fù)
2.2 利用mysqlbinlog命令導(dǎo)出sql文件
mysqlbinlog mysql-bin.00001 > 1.sql #-d DB #只導(dǎo)出指定庫sql語句,默認(rèn)binlog會保存所有庫的操作 mysqlbinlog -d test mysql-bin.00001 > 1.sql基于指定位置導(dǎo)出sql語句:
mysqlbinlog mysqlbin.00001 --start-position=106 >1.sql #導(dǎo)出從位置106開始到文件結(jié)束的sql語句 mysqlbinlog mysqlbin.00001 --stop-position=500 >2.sql #導(dǎo)出從文件開始到位置為500處的sql語句 mysqlbinlog mysqlbin.00001 --start-position=106 --stop-position=500 >3.sql #導(dǎo)出從位置106到500的sql語句基于指定時間導(dǎo)出:
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.sql2.3 備份恢復(fù)
mysql -uroot -p < 1.sql #通常先將全量備份的數(shù)據(jù)恢復(fù),然后用msyqlbinlog導(dǎo)出的文件接著全量的恢復(fù)后面的數(shù)據(jù)Mysql主從同步配置
1.1主從同步過程
- 1.從庫IO線程連接上主庫,并請求從指定日志文件的指定位置之后的日志內(nèi)容
- 2.主庫收到來自從庫的請求后,負(fù)責(zé)復(fù)制的IO線程根據(jù)請求信息讀取指定日志指定位置之后的日志內(nèi)容,并返回給從庫的IO線程
- 3.從庫接收到信息后,將接收到的內(nèi)容依次寫到從庫的Relaylog文件的最末端,并讀取其中主庫的bin-log文件名和位置記錄到master-info文件中,以便下次讀取時能清楚的告訴主庫"我需要從bin-log文件的哪個位置開始往后的內(nèi)容"
- 4.從庫的SQL線程檢測到Relaylog中新增的內(nèi)容后,會馬上解析該文件中的內(nèi)容,形成SQL語句并執(zhí)行,從而完成同步
1.2 配置
主庫配置
- 1.主庫開啟log_bin 功能,并設(shè)置server_id
- 2.主庫創(chuàng)建主從同步的mysql賬號,并授予replication,slave權(quán)限
- 3.主庫整庫鎖表,然后備份已有數(shù)據(jù)生成sql文件,并拷貝至從庫服務(wù)器,完成后解鎖主庫
從庫配置
- 1.設(shè)置server_id, 從庫一般不需要開啟log_bin功能,除非做級聯(lián),即同時還作為其他庫的主庫
- 2.先手動復(fù)制主庫的數(shù)據(jù)到從庫
- 3.如果主庫配置第三步中,備份數(shù)據(jù)時沒有指定--master-data=1 ,則需要在從庫中指定主庫信息
- 4.從庫開啟同步開關(guān)
轉(zhuǎn)載于:https://www.cnblogs.com/fllf/p/10417431.html
總結(jié)
以上是生活随笔為你收集整理的Mysql数据备份恢复及主从同步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一个python命令
- 下一篇: django-5-自定义模板过滤器及标签