MySQL数据的备份与恢复
MySQL备份的类型
按照备份时对数据库的影响范围分为:
Hot backup(热备)??Cold Backup(冷备)Warm Backup(温备)
Hot backup:指在数据库运行中直接备份,对正在运行的数据库没有任何影响,(Online Backup)官方手册为在线备份
Cold Backup:指在数据库停止的情况下进行备份,(OfflineBackup) 官方手册称为离线备份
Warm Backup:备份同样在数据库运行时进行,但是会对当前数据库的操作有所影响,例如加一个全局读锁以保证备份数据的一致性
按照备份后文件内容:
逻辑备份 -->
指备份后的文件内容是可读的,通常为文本文件,内容一般是SQL语句,或者是表内的实际数据,如mysqldump和SELECT * INTO OUTFILE的方法,一般适用于数据库的升级和迁移,恢复时间较长
裸文件备份(物理备份)-->
拷贝数据库的物理文件,数据库既可以处于运行状态(mysqlhotcopy 、ibbackup、xtrabackup这类工具),也可以处于停止状态,恢复时间较短。
按照备份数据库的内容的量来分,又可以分为:
完全备份:对数据库完整的备份
增量备份:在上一次完全备份基础上,对更新的数据进行备份(xtrabackup)
日志备份:二进制日志备份,主从复制
逻辑备份工具mysqldump
使用的时候MySQL当要导入或者导出数据量大的库的时候,用PHPMYADMIN甚至MySQL Administrator这些工具都会力不从心,这时只能使用MySQL所提供的命令行工具mysqldump进行备份恢复;数据量大的时候不推荐使用,可支持MyISAM,InnoDB
MySQL数据的导出和导入工具: mysqldump
导出数据
语法: mysqldump [TMPIONS] database [tables] >导出的文件名.sql
(1):导出所有数据库
mysqldump -uroot -pMySql@123 -A >all.sql
mysqldump -uroot -pMySql@123 --all-databases >all2.sql参数-A代表所有,等同于 --all-databases
(2):导出某个数据库
mysqldump -u 用户名 -p密码 数据库名 > 导出的文件名.sql?
mysqldump -uroot -pMySql@123 testdb > testdb.sql
(3):导出单张表
mysqldump -uroot -pMySql@123 testdb book1 > testdb.book1.sql??#导出testdb库book1表
(4):导出库的表结构
mysqldump -uroot -pMySql@123 -d testdb > testdbtable.sql??#只导出testdb库的表结构
(5):只导出数据
mysqldump -uroot -pMySql@123 -t testdb > testdbdata.sql??#只导出testdb库中的数据
(6):导出数据库,并自动生成库的创建语句
mysqldump -uroot -pMySql@123 -B testdb > testdb.sql #生成建库语句
mysql -uroot -pMySql@123 < testdb.sql #导入不用指定数据名
导入数据
(1):导入所有数据库
mysql -uroot -pMySql@123 < all.sql
(2):导入数据库
mysql -uroot -pMySql@123 testdb < testdb.sql??#如果导入时,没有对应的数据库,需要你手动创建一下mysql> create database testdb;
使用source导入
mysql> drop database testdb;
mysql> create database testdb;
mysql> use testdb;
mysql> source /tmp/testdb.sql
(3):导入表
mysql> drop table testdb.book1;
mysql> source /tmp/testdb.book1.sql;???#导入表时,不需要重新创建表,要先进到相应的数据库中
mysql> select * from testdb.book1;
(4):导入表结构和数据
mysql> create database testdb;
mysql -uroot -pMySql@123 testdb < testdbtable.sql
mysql -uroot -pMySql@123 testdb < testdbdata.sql
简单测试案例
参数说明:
--quick:用于转储大的表,强制mysqldump从服务器一次一行的检索数据而不是检索所有行,并输出当前cache到内存中
--no-create-info:不要创建create table语句
--extended-insert:使用包括几个values列表的多行insert语法,这样文件更小,IO也小,导入数据时会非常快
--default-character-set=utf8 :按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码
(1):导出表结构
mysqldump -uroot -pMySql@123 --default-character-set=utf8 -d testbookdb > booktable.sql
(2): 如果booktable.sql 里的字符集不是utf8,可以用vim编辑进行批量更改
(3): 确保数据库不再更新,导出指定库的所有数据
(4):打开bookdata.sql 将SET NAME latin1 修改成SET NAME utf8
???????????????? vim bookdata.sql
???????????????? /*!40101 SET NAMES utf8 */;
(5): 重新建库
??????? mysql> create database testdb default charset utf8;
(6):建立表,导入我们之前导出的表的表结构
??????? mysql> CREATE TABLE book1 (bTypeId int,bName char(16),price int,publishing char(16));
(7): 导入数据
??????? mysql -uroot -pMySql@123 testdb < bookdata.sql
??????? 注意:选择目标字符集时,要注意最好大于等于原字符集(字库更大),否则可能会丢失不被支持的数据
写这个文章的时候也有参考其他文档,如有侵权请告知删除
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!