您的位置:首页 > 数据库 > MySQL

MySQL 数据备份和还原 详解

2018-03-23 22:56 696 查看
1> 数据库备份,在 MySQL 的 bin目录下,有一个名为 mysqldump 的可执行文件,将该 bin 目录添加到环境变量中,可以利用它在 "命令提示符" 环境下来备份数据库,mysqldump命令的工作原理是先查出需要备份的表的结构,再在文本中生成一个 CREATE语句,然后将表中的所有记录转换成一条 INSERT语句<1> 备份一个数据库$ mysqldump -h localhost -u username -p dbname table1 table2 ... > BackupName.sqldbname是数据库的名称,table1和table2是表的名称没有该参数时将备份这个数据库,BackupName.sql表示备份文件的名称可以是绝对路径注 : 1> mysqldump命令备份的文件并非一定是 .sql 也可以是其他格式如.txt,通常是 .sql       2> 不登录mysql,直接在MySQL中执行备份语句如 : mysqldump -h localhost -u root -p test student >D:\T\s.sql
备份数据进行压缩$ mysqldump -uroot -p -B -F -R -x --master-data=2 mytest | gzip >/root/backup/bak_$(date +%F).sql.gz参数说明 :-B : 指定数据库-F : 刷新日志-R : 备份存储过程等-x : 锁表--master-data : 在备份语句里添加 CHANGE MASTER 语句以及 binlog 文件及位置点信息推荐这种方式备份,之后直接使用一条语句就可以恢复被删除的数据库数据$ mysql -uroot -p < bak_2018-03-16.sql
<2> 备份多个数据库$ mysqldump -h localhost -u username -p --databases dbname1  dbname2 ... > BackupName.sql
<3> 备份所有数据库$ mysqldump -h localhost -u username -p --all-databases > BackupName.sql
<4> 可以关闭服务器,在将数据库目录复制出来,但是这不是最好的备份方法
2> 使用 mysqlhotcopy工具快速备份,这种备份方式mysqldump命令快,工作原理是先将需要备份的数据库加上一个读操作锁,然后用 FLUSH TABLES 将内存中的数据写回到硬盘上的数据库中,最后被备份的数据库文件复制到目标目录,命令格式如下 :# mysqlhotcopy [option] dbname1 dbname2 ... backupDir/其中,dbname1 等表示需要备份的数据库名称;backupDir 参数指定备份到哪个文件夹下。这个命令的含义就是将 dbname1、dbname2 等数据库备份到 backupDir 目录下。mysqlhotcopy 工具有一些常用选项 :--help : 用来查看 mysqlhotcopy 的帮助--allowold : 如果备份目录下存在相同的备份文件,将旧的备份文件名加上 _old--keepold : 如果备份目录下存在相同的备份文件,不删除旧的备份文件,而是将旧文件更名--flushlog : 本次备份之后,将对数据库的更新记录到日志中--noindices : 只备份数据文件,不备份索引文件--user=用户名 : 用来指定用户名,可以用 -u 代替--password=密码 : 用来指定密码,可以用 -p 代替。使用 -p 时,密码与 -p 紧挨着,或者只使用 -p,然后用交换的方式输入密码,这与登录数据时的情况是一样的--port=端口号 : 用来指定访问端口,可以使用 -P 代替--socket=socket文件 : 指定 socket文件,可以使用 -S 代替注 : 1> mysqlhotcopy工具不是MySQL自带的,需要安装Perl的数据库接口报       2> 由于mysqlhotcopy工具的工作原理是将数据库文件拷贝到目标目录,因此其只能备份MyISAM类型的表,不能用来备份InnoDB类型的表
3> 数据还原,通过使用 mysqldup 程序备份的文件,可以将数据库恢复到指定的状态mysql -u root -p [dbname] < backup.sql# 也就是mysql -h MySQL数据库所在的域名或IP地址 -u 账户名 -p 要恢复的数据库名<备份文件在”命令提示符”下执行该命令后,会出现提示要求输入账户名对应的密码,输入密码后按回车键,即可开始恢复指定数据库如 :$ mysql -h localhost -u root -p MY_SCHOOL </Users/chenshun131/Desktop/backup.mysql
对于大表数据迁移,需要进行取出数据,并导入新的数据库。在取出数据时,分多次取出解决数据量大的问题,不使用 limit 这将会导致出现索引命中差的问题mysql> select * from table_name where id>15000000 and id<15050000;在导入数据时,将数据组装成 SQL文件,最后统一导入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: