mysql自带的mysqldump备份工具,将制定的数据库或表导出都一样的sql文件,以便备份或数据还原,但如果数据量很大,会耗费会很长时间,且锁表。
对于大规模备份,考虑使用物理方法,如:mysqlbackup(适于InnoDB、MyISAM及其他表)、mysqlhotcopy(适于MyISAM表)、Xtrabackup(适于InnoDB及MyISAM表)、LVM(适于各类表)等。
一、数据备份
mysqldump常用备份实例
1.导出所有数据库
mysqldump -uroot -pabc123 --all-databases > all.sql
2.
出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -uroot -pabc123 test> test.sql
导出整个数据库的表结构 增加-d参数
mysqldump -uroot -pabc123 -d test> test.sql
3.
导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -uroot -pabc123 test user> user.sql
导出一个表的表结构。增加-d参数
mysqldump -uroot -pabc123 -d test user> user.sql
4.
导出部分数据,
加上--where参数
mysqldump -uroot -pabc123 test score --where="score>=60" > score.sql
5.导出
一个表的部分字段
mysqldump -uroot -pabc123
-e "set names 'utf8';select realname,card_number,company_name from Database.name_v where type=2 and status=1" >name_v.sql -p
注:常用参数说明:
--add-drop-database
在CREATE DATABASE前DROP DATABASE
--add-drop-table 在每个create语句之前增加一个drop table
--add-drop-trigger
在CREATE TRIGGER 前DROP TRIGGER
--default-character-set=charset
指定导出数据时采用何种字符集
--disable-keys
在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。
--lock-all-tables /
-x
提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭
--single-transaction 和 --lock-tables 选项。
--lock-tables
它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。
--no-create-info /
-t
只导出数据,而不添加 CREATE TABLE 语句
--no-data /-d
不导出任何数据,只导出数据库表结构。
--routines /-R
导出存储过程以及自定义函数。
--single-transaction
在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 --quick 选项。
--triggers
同时导出触发器,
用 --skip-triggers 禁用它
mysqldump -uroot -pabc123
--default-character-set=utf8 --opt --extended-insert=false
--triggers -R --hex-blob -x db_name > db_name.sql
mysqldump -uroot -pabc123
--default-character-set=utf8 --opt --extended-insert=false
--triggers -R --hex-blob --single-transaction db_name > db_name.sql
实现在线备份,
可以使用 --master-data 参数来实现
mysqldump -uroot -pabc123
--default-character-set=utf8 --opt --master-data=1
--single-transaction --flush-logs db_name > db_name.sql
在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。
二、数据还原
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。
1. mysql -uroot -pabc123 testdb < db.sql
这种方法很容易产生乱码,因为:
a,导出数据库时,你如果忘了设置导出字符集的话,在导入的时候,就有可能会出问题.
b,假如,你导出时设置导出时设置了utf8的编码,但是你又把你的数据库现在的字符集改成了gb2312的.这样又会乱码。
2.
用 source 语句
mysql -uroot -pabc123
>use testdb
;
>set names utf8; #这里的字符集根你的将要导入的数据库的字符集一至。
>source db.sql;
参考文章:
1.
mysqldump备份还原和mysqldump导入导出语句大全详解
2.
mysqldump命令详解
3.
MySQL数据备份之mysqldump使用
4.
mysql 利用binlog增量备份,还原实例