[root@localhost /]# mysqldump --all-databases > /tmp/dump.sql
导出部分数据库及表
[root@localhost /]# mysqldump --databases db1 db2 db3 > /tmp/dump.sql
导出单个数据库可以用如下两种格式
[root@localhost /]# mysqldump --databases test > /tmp/dump.sql
[root@localhost /]# mysqldump test > /tmp/dump.sql
区别是使用--databases在导出数据时会加上CREATE DATABASE 或 USE 语句,不使用--databases参数在导入数据时需要先指定一个存在的数据库作为默认数据库导入数据。
[root@localhost /]# mysqldump test t1 t3 t5 > /tmp/dump.sql
[root@localhost /]# mysqldump --tables test t1 t3 t5 > /tmp/dump.sql
3.1.2 导入SQL格式备份文件
[root@localhost /]# mysql < /tmp/dump.sql (方法1:shell命令行操作)
mysql> source /tmp/dump.sql (方法2:进入mysql数据库操作)
如果导出文件时未指定了--all-databases 或 --databases选项,备份文件不包含CREATE DATABASE 和 USE语句,导入数据前我们需要预先创建库和指定库。
[root@localhost /]# mysqladmin create db1
[root@localhost /]# mysql db1 < /tmp/dump.sql
方法2:进入mysql数据库操作
mysql> CREATE DATABASE IF NOT EXISTS db1;
mysql> USE db1;
mysql> source dump.sql
3.2 文件分隔符格式备份还原
[root@localhost /]# mysqldump --tab=/tmp db1
指定格式导出
mysql> select * from db.dbtable;
+------+-------------+--------------+
| c1 | c2 | c3 |
+------+-------------+--------------+
| 1 | test, comma | test " quote |
+------+-------------+--------------+
导出指定格式数据表命令
[root@localhost /]# mysqldump --tab=/tmp --fields-terminated-by=',' --fields-enclosed-by=0x22 --fields-escaped-by='#' --lines-terminated-by='\n' db1
[root@localhost tmp]# cat dbtable.txt
"1","test, comma","test #" quote"
或者
[root@localhost /]# mysqldump --tab=/tmp --fields-terminated-by=',' --fields-optionally-enclosed-by='"' --fields-escaped-by='#' --lines-terminated-by='\n' db1
[root@localhost tmp]# cat dbtable.txt
1,"test, comma","test #" quote"
注:我们可以用十六进制代替参数所指定的值。--fields-optionally-enclosed-by选项对数字不包裹。
[root@localhost /]# mysql db1 < /tmp/t1.sql
[root@localhost /]# mysqlimport db1 /tmp/t1.txt
对指定格式的导入:
[root@localhost /]# mysql db1 < /tmp/t1.sql
[root@localhost /]# mysqlimport --fields-terminated-by=',' --fields-enclosed-by='"' --fields-escaped-by='#' --lines-terminated-by='\n' db1 t1.txt
或者
mysql> USE db1;
mysql> LOAD DATA INFILE 't1.txt' INTO TABLE t1 FIELDS FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '#' LINES TERMINATED BY '\n';
3.3 填充数据至另一数据库
[root@localhost /]# mysqldump db1 | mysql -h192.168.1.100 -P3306 -ujesse -pjesse -C db2
[root@localhost /]# mysqldump --all-databases --single-transaction --master-data=1 --flush-logs --events > /tmp/dump.sql
--flush-logs:全备前刷新所有日志到binlog文件,并创建一个新的binlog文件,用于增备。
[root@localhost /]# mysqldump --no-data --routines --events testdb > /tmp/dump.sql
[root@localhost /]# mysqldump --no-create-info testdb > /tmp/dump.sql
4.4 备份压缩
[root@localhost /]# mysqldump --all-databases --single-transaction --master-data=1 --flush-logs --events | gzip > /tmp/dump_`date '+%Y-%m-%d_%H:%M:%S'`.sql.gz
[root@localhost tmp]# mysqldump -uroot -p****** --tab=/tmp/test/ db1
mysqldump: Got error: 1: Can't create/write to file '/tmp/test/dump.txt' (Errcode: 13 - Permission denied) when executing 'SELECT INTO OUTFILE'
解决办法:
[root@localhost /]# chmod 757 /tmp/test/
或者把目标目录修改为mysql组所有
[root@localhost tmp]# chown mysql:mysql /tmp/test/
5.2 执行备份时磁盘空间不足
[root@localhost /]# mysqldump --tab=/tmp/test -uroot -p****** db1
mysqldump: Error: 'Got error 28 from storage engine' when trying to dump tablespaces
mysqldump: Couldn't execute 'show fields from `handler_table`': Got error 28 from storage engine (1030)
出现此问题的原因:临时空间不够,无法执行此SQL语句
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
64G 64G 0 100% /
tmpfs 128G 0 128G 0% /dev/shm
/dev/sda1 190M 68M 113M 38% /boot
解决办法:清理磁盘空间。
[root@localhost /]# mysqldump --tab=/tmp/test -uroot -p -h192.168.1.200 -P3355 test
Enter password:
mysqldump: Can't create/write to file '/tmp/test/handler_table.sql' (Errcode: 2)
mysqldump: Can't create/write to file '/tmp/test/handler_table.sql' (Errcode: 2)
解决办法: