#完全備份時的狀態 | #表1、表2 | 表1、表2 | 表1、表2 |
第1次加入內容 | #建立表格3 | 建立表格3 | 建立表格3 |
#備份內容 | 表1、表格2、表格3 | 表3 | 表3 |
第2次加入內容 | 建立表格4##建立表4 |
建立表格4 |
|
備份內容
表1、表2、表3、表4 |
表3、表4 |
表4 |
|
- 完全備份每次都是把整個資料庫中的內容進行備份
- 差異備份在第1次加入內容後備份,也就是備份新加入的內容;第2次加入內容後備份,把第1次新增的內容也進行了備份,它是根據完全備份時的狀態決定的
- 差異備份每次都是把完全備份之後所有的修改進行備份,而不管之前是否做過差異備份
- 增量備份只備份每次新修改的內容,第1次建立表3,就對錶3備份,第2次加入表4後,因為之前已經備份過表3 ,所以只備份表4的內容
1.3 MySQL 完全備份概念解讀
- MySQL 的備份方式主要有完全備份與增量備份
- 完全備份是對整個資料庫的備份、資料庫結構和檔案結構的備份,保存的是備份完成時刻的資料庫,是增量備份的基礎
- 完全備份的優點是備份與復原作業簡單方便,缺點是資料存在大量重複,佔用大量的備份空間,備份的時間長
- 在生產環境中,這兩種備份方式都會使用,需要製定合理高效的方案達到備份資料的目的,避免資料遺失造成嚴重的後果
2.mysqldump 備份演練
- MySQL 資料庫的備份可以採用兩種方式
- 因為資料庫其實就是文件,直接打包資料庫資料夾,或是使用專用備份工具mysqldump 都可以進行備份工作
2.1 使用tar 打包資料夾備份
- MySQL 的資料庫檔案預設都是保存在安全性目錄的data 資料夾下,可以直接儲存data 資料夾,因為佔用空間較大,可以使用data 打包壓縮進行儲存
yum -y install xz#数据库文件很大,可以使用压缩率较大的xz格式压缩,首选需要安装xz压缩格式工具tar Jcvf /opt/mysql-$(date +%F).tar.xz /usr/local/mysql/data/#对数据库文件夹进行打包操作ls /opt#查看打包命令是否运行成功,已经生成了备份文件du -sh /opt/mysql-2021-02-05.tar.xz #对比打包前后的文件大小,可以看到压缩的备份文件所占用空间很小tar -Jxvf /opt/mysql-2021-02-05.tar.xz -C /usr/local/mysql/data/systemctl restart mysql#如果数据库文件损坏数据丢失,可以解压缩文件,相当于数据恢复
2.2 使用mysqldump 工具備份
- 上文中示範的是對MySQL整個資料庫的目錄進行壓縮的方式,是備份資料庫中所有的內容
- mysqldump 是mysql 用於轉存儲資料庫的實用程式(自帶),它主要產生一個SQL 腳本,其中包含從頭重新創建資料庫所必需的指令(如CREATE、TABLE、INSERT等)
- 使用mysqldump 可以更靈活地控制備份的內容,例如某幾個表或函式庫都可以單獨備份
#开始之前,创建库和表,用作例子mysql -uroot -p123123#输入密码进入数据库,以上为我的密码create database SCHOOL;#创建库use SCHOOL;create table CLASS01 ( id int(2) not null auto_increment, name varchar(10) not null, sex char(5) not null, hobby varchar(10), primary key (id));#创建表结构#字段一:id,最大显示长度2,不能为空,自动递增从1开始#字段二:name,可变长度字段,10,不能为空#字段三:sex,固定长度5,不能为空#字段四:hobby,可变长度,最多10字符#字段四:主键(id)insert into CLASS01 values(1,'wangyi','man','reading');insert into CLASS01 values(2,'wanger','woman','singing');#插入2条数据select * from CLASS01;#检查一下quit#退出数据库
#使用 mysqldump 对某些表进行完全备份,命令格式如下:mysqldump -u[用户名] -p[密码] [选项] [数据库名] [数据表名] > /备份路径/备份文件名.sql#导出的为数据库脚本文件例:对库SCHOOL中的表class进行备份至/opt/目录下mysqldump -uroot -p[密码] SCHOOL CLASS01 > /opt/test01.sql
#对某些库进行完全备份mysqldump -uroot -p[密码] [数据库名] > /目录/备份文件名.sql例:mysqldump -uroot -p123123 SCHOOL > /opt/test02#对多个库进行完全备份mysqldump -uroot -p123123 --databases SCHOOL sys > /opt/test03.sql#对所有库进行完全备份mysqldump -uroot -p123123 --all-databases > /opt/test04.sql#直接备份表结构mysqldump -uroot -p123123 -d SCHOOL CLASS01 > /opt/test05.sqlls /opt/#查看打包命令是否运行成功,已经生成了备份文件
#cat /opt/test05.sql#分析 mysqldump 工具生成的备份文件的内容
- 上面使用了-d 選項,說明只保存資料庫的表結構,且表中只有一個庫,可以看到先刪除了表(同名),再創建了它
- 刪除和創建都是最普通的MySQL 指令,任何一條在MySQL 中都是可以執行的語句,有了這些語句就可以創建出和現在的表結構相同的表
- 如果不使用-d 選項,會把資料也進行備份,下面看看資料時如何保存的
cat /opt/test01
- #可以看到與使用-d 參數的差異是最後出現了insert into 語句,往資料庫中插入了兩條數據,也就是說,資料的備份是保存的插入語句操作
- 透過以上分析,很容易理解,備份的本質就是保存資料庫目前表結構的建立語句和現有資料的插入語句,有了它們就可以直接恢復資料庫的狀態
#二、MySQL 完全恢復
- 前面介紹了資料庫的完全備份,使用mysqldump 工具可以把資料的建立語句保存在備份的腳本檔案中
- 當出現錯誤時,可以使用以下幾種方法還原它們
##1.恢復整庫操作
1.1 source 指令整庫恢復
mysql -uroot -p123123show databases;drop database SCHOOL;show databases;source /opt/test03.sql#之前备份过的,该备份为SCHOOL和sys两个库的完整备份#注意!选项得加“--databases”才是完整的备份,不然会恢复不了
1.2 MySQL 指令整庫復原
quitmysql -uroot -p123123 -e 'drop database SCHOOL;'mysql -uroot -p123123 -e 'SHOW DATABASES;'mysql -uroot -p123123 <p><img src="https://img.php.cn/upload/article/000/000/052/46d75be18c0819b67f9c8259bacd7776-9.png" alt="MySQL 介紹完全備份與還原"></p><p>#2.復原表操作<strong></strong></p>##還原資料表同樣可以使用source 指令與mysql 指令操作
2.1 使用source 指令恢復表格mysql -uroot -p123123use SCHOOL;show tables;drop table CLASS01;
source /opt/test01.sql#恢复表show tables;select * from CLASS01;#查看
2.2 使用 mysql 命令恢复表
quitmysql -uroot -p123123 -e 'SHOW TABLES FROM SCHOOL;'mysql -uroot -p123123 -e 'DROP TABLES SCHOOL.CLASS01;'mysql -uroot -p123123 -e 'SHOW TABLES FROM SCHOOL;'mysql -uroot -p123123 SCHOOL <p><img src="https://img.php.cn/upload/article/000/000/052/29945f61915e1a240cc5e16f53f849e5-12.png" alt="MySQL 介紹完全備份與還原"></p><p><strong>3.MySQL 备份思路</strong></p>
- MySQL 需要定期实施备份,指定合适的备份计划或策略,并严格遵守
- 除了进行完全备份,开启 MySQL 服务器的日志功能也很重要,完全备份加上日志,可以对 MySQL 进行最大化还原
- 备份文件的名字还需钥使用统一的易于理解的名称,推荐使用库名或表名加上时间的命名规则,在需要恢复数据库时能很容易的定位到相应的所需备份文件
相关免费学习推荐:mysql数据库(视频)