溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL中怎么實(shí)現(xiàn)備份與恢復(fù)

發(fā)布時(shí)間:2021-08-04 16:55:51 來源:億速云 閱讀:134 作者:Leah 欄目:數(shù)據(jù)庫

這篇文章給大家介紹MySQL中怎么實(shí)現(xiàn)備份與恢復(fù),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

1、利用mysqldump實(shí)現(xiàn)從邏輯角度完全備份mysql,配合二進(jìn)制日志備份實(shí)現(xiàn)增量備份
    2、利用lvs快照從物理角度實(shí)現(xiàn)幾乎熱備的完全備份,配合二進(jìn)制日志備份實(shí)現(xiàn)增量備份
    3、利用percona公司的xrabackup實(shí)現(xiàn)完全熱備份與增量熱備份
    實(shí)驗(yàn)環(huán)境:RHEL5.8,SElinux關(guān)閉,MySQL是tar包初始化安裝版本5.5.28
    一、測(cè)試環(huán)境準(zhǔn)備
    1.1 mysql的安裝就不說了,
    1.2 編緝/etc/my.cnf把二進(jìn)制日志存放目錄改到其它非數(shù)據(jù)目錄,innodb每表一文件
    建立一目錄用于存放二進(jìn)制日志
    1.mkdir /mybinlog
    2.chown mysql:mysql /mybinlog
    修改my.cnf
    1.vim /etc/my.cnf
    2.log-bin=/mybinlog/mysql-bin    ##二進(jìn)制日志目錄及文件名前綴
    3.innodb_file_per_table = 1      ##啟用InnoDB表每表一文件,默認(rèn)所有庫使用一個(gè)表空間
    啟動(dòng)mysqld
    service mysqld start
    1.3 創(chuàng)建一個(gè)測(cè)試庫與測(cè)試表
    1.mysql> create database laoguang;
    2.mysql> use laoguang;
    3.mysql> create table linux  (id tinyint auto_increment primary key,name char(10));
    4.mysql> insert into linux (name) values ('apache'),('nginx'),('php');
    1.4 創(chuàng)建用于存放備份的目錄
    1.mkdir /myback
    2.chown -R mysql:mysql /myback
    二、用mysqldump實(shí)現(xiàn)備份
    2.1 mysqldump用來溫備,所以我們得為所有庫加讀鎖,并且滾動(dòng)一下二進(jìn)制日志,并記錄當(dāng)前二進(jìn)制文件位置
    1.mysqldump --all-databases --lock-all-tables  --routines --triggers --master-data=2 \
    2.--flush-logs > /myback/2012-12-3.19-23.full.sql
    3.
    4.--all-databases 備份所有庫
    5.--lock-all-tables 為所有表加讀鎖
    6.--routines 存儲(chǔ)過程與函數(shù)
    7.--triggers 觸發(fā)器
    8.--master-data=2 在備份文件中記錄當(dāng)前二進(jìn)制日志的位置,并且為注釋的,1是不注釋掉在主從復(fù)制中才有意義
    9.--flush-logs 日志滾動(dòng)一次
    查看有沒有備份成功,有沒有啟用新二進(jìn)制的日志,查看備份的文件中有沒有記錄完整備份后二進(jìn)制的位置
    備份二進(jìn)制日志
    cp /mybinlog/mysql-bin.000001 /myback/2012-12-3.19-23.full.00001
    2.2 模擬數(shù)據(jù)庫意外損壞,測(cè)試完整恢復(fù)
    1.rm -rf /data/mydata/*
    2.rm -rf
    3./mybinlog/*
    初始化mysql并啟動(dòng)mysql
    1.cd /usr/local/mysql
    2../scripts/mysql_install_db --user=mysql --datadir=/data/mydata
    3.rm -rf /mybinlog/* ##因?yàn)槲覀儾皇侨鲁跏蓟?可能會(huì)有報(bào)錯(cuò)的二進(jìn)制日志,我們不需要
    4.service mysqld start  ##啟動(dòng)時(shí)會(huì)重新生成新的二進(jìn)制日志的
    恢復(fù)到備份狀態(tài),備份前先關(guān)閉對(duì)恢復(fù)過程的二進(jìn)制日志記錄,因?yàn)橛涗浕謴?fù)語句是毫無意義的
    1.mysql> set global sql_log_bin=0;
    2.mysql < /myback/2012-12-3.19-23.full.sql ##如果有賬號(hào)密碼記的-u -h哦
    3.打開記錄并查看恢復(fù)狀況
    4.mysql> set global sql_log_bin=1;
    5.mysql> show databases;
    打開二進(jìn)制記錄并查看恢復(fù)狀況
    1.mysql> set global sql_log_bin=1;
    2.mysql> show databases;
    2.3 模擬一種場(chǎng)景,我往linux表中新添加了數(shù)據(jù),然后不小心將這個(gè)表刪了,我們要恢復(fù)到刪除之前的狀態(tài),并且新加的數(shù)據(jù)還存在.
    2.3.1 新增數(shù)據(jù)
    1.mysql> use laoguang;
    2.mysql> insert into linux  (name) values ('haddop'), ('mysql');
    3.mysql> drop table linux;
    4.mysql> show master status;   ##查看當(dāng)前所在二進(jìn)制日志中的位置
    5.+------------------+----------+--------------+------------------+
    6.| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    7.+------------------+----------+--------------+------------------+
    8.| mysql-bin.000001 |     9005 |              |                  |
    9.+------------------+----------+--------------+------------------+
    我們先恢復(fù)完整數(shù)據(jù),再恢復(fù)完整備份后到刪除之前的數(shù)據(jù),對(duì)應(yīng)二進(jìn)制日志就是完整備份后的二進(jìn)制日志位置到刪除表之前的位置

關(guān)于MySQL中怎么實(shí)現(xiàn)備份與恢復(fù)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI