mysqldump语法和选项
【常用的选项】
1) - -add-drop-table
这个选项将会在每一个表的前面加上drop table if exists语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除。
2) - -add-locks
这个选项会在 insert 语句中捆上一个look table和unlock table语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作。
3) - -tab
这个选项将会 创建两个文件,一个是 带分隔符的文本文件,备份的数据表中的每行存储为文本中的一行,以 “表名.txt”保存;另一个 输出文件为数据表的create table语句,以“ 表名.sql”保存。
4) --quick或者—opt
如果你未使用--quick或者--opt选项,那么mysqldump将在转储结果之前把全部内容载入到内存中。这在你转储大数据量的数据库时将会有些问题。该选项默认是打开的,但可以使用--skip-opt来关闭它。
5) --skip-comments
使用--skip-comments可以去 掉导出文件中的注释语句
6) –compact
使用--compact选项可以 只输出最重要的语句,而不输出注释及删除表语句等等
------------------------------------------------------------------------------
-A 导出所有数据库数据,包括数据库和创建脚本
-a 导出包括创建选项,默认启用(如创建表时带有选项 ENGINE DEFAULT CHARSET不需要则使用:–skip-create-options
-B 导出指定数据库数据,包括数据库和表的创建脚本 <不需要则使用:-n, --no-create-db>
-C 服务器客户端协议间使用压缩
-c 完整插入语句,insert时把字段名都列出
–compac 多余的注释去掉,一般用于debug,生产不用
–compatible 导出相应模式的脚本,模式有:ansi, mysql323, mysql40,postgresql, oracle, mssql, db2, maxdb, no_key_options,no_table_options, no_field_options
-d 只备份表结构
-t 只备份数据
–default-character-set=<字符集名称> 导出指定字符集格式
–delete-master-logs 使用新的日志,并删除所以旧日志文件。默认启用 --master-data
-E 包括事件、触发器
-e 多个insert使用一个语句多个values,默认启用 相反:每个value一个insert则使用 --skip-extended-insert
-F 刷新binlog日志,日志文件切换新
-f 错误继续
-i 包括额外信息,默认启用
-l 只读锁表
–master-data[=#] 增加binlog日志文件及对应的位置点,等于2:注释状态,显示备份起始的日志点;等于1:多用于从库,使从库从某个日志点开始
-Q 表和字段名使用符号(`)
-R 包括存储过程和函数及触发器
–replace “INSERT INTO” 替换为 “REPLACE INTO”
–tables 覆盖选项"-B" ,如库和表同名
-x 锁定所有数据库和表,全局读锁。关闭 --single-transaction 和 --lock-tables
数据库备份,数据库为school,素材如下
1.创建student和score表
CREATE TABLE student (
id INT(10) NOT NULL UNIQUE PRIMARY KEY ,
name VARCHAR(20) NOT NULL ,
sex VARCHAR(4) ,
birth YEAR,
department VARCHAR(20) ,
address VARCHAR(50)
);
创建score表SQL代码如下:
CREATE TABLE score (
id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT ,
stu_id INT(10) NOT NULL ,
c_name VARCHAR(20) ,
grade INT(10)
);
2.为student表和score表增加记录
向student表插入记录的INSERT语句如下:
INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');
INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');
INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');
向score表插入记录的INSERT语句如下:
INSERT INTO score VALUES(NULL,901, '计算机',98);
INSERT INTO score VALUES(NULL,901, '英语', 80);
INSERT INTO score VALUES(NULL,902, '计算机',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '计算机',70);
INSERT INTO score VALUES(NULL,904, '英语',92);
INSERT INTO score VALUES(NULL,905, '英语',94);
INSERT INTO score VALUES(NULL,906, '计算机',90);
INSERT INTO score VALUES(NULL,906, '英语',85);
3.备份数据库school到/backup目录
mysqldump -uroot -p123456 -B school > /backup/db1
4.备份school数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库
mysqldump -uroot -p123456 --add-drop-table -d school > /backup/add-drop-db
5.直接将school数据库压缩备份
mysqldump -uroot -p123456 -B school | gzip > /backup/dbzip
6.备份school数据库某个(些)表。此例备份student表
mysqldump -uroot -p123456 school student > /backup/dbschool_student
7.同时备份多个数据库(其他数据库素材自行准备)
mysqldump -uroot -p123456 -B school company > /backup/db_databases
8.仅仅备份school数据库结构
mysqldump -uroot -p123456 -d school > /backup/school_stru_table
9.备份服务器上所有数据库
mysqldump -uroot -p123456 -A > /backup/alldb
10.还原school数据库
mysql [school]>drop database school;
Query OK, 2 rows affected (0.02 sec)
mysql [(none)]>source /backup/db1
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Database changed
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 10 rows affected (0.00 sec)
Records: 10 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql [school]>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| company |
| db |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
7 rows in set (0.00 sec)
11.还原压缩的school数据库
mysql [school]>drop database school;
Query OK, 2 rows affected (0.00 sec)
zcat dbzip | mysql -uroot -p123456
mysql [school]>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| company |
| db |
| mysql |
| performance_schema |
| school |
| sys |
+--------------------+
7 rows in set (0.00 sec)
mysql [school]>show tables;
+------------------+
| Tables_in_school |
+------------------+
| score |
| student |
+------------------+
2 rows in set (0.00 sec)
mysql [school]>
12.使用xtrabackup备份数据库
innobackupex --user =root --password =123456 --socket=/tmp/mysql.sock /backup/xtra-db/
13.在另外的数据库服务器上还原xtrabackup 备份
14.使用mydumper备份数据库
[root@localhost backup]# mydumper -u root -p 123456 -S /tmp/mysql.sock -B school -o /backup/mydumper_db
[root@localhost backup]# ll
total 892
-rw-r--r--. 1 root root 2520 Mar 24 08:17 add-drop-db
-rw-r--r--. 1 root root 882292 Mar 24 08:30 alldb
-rw-r--r--. 1 root root 3658 Mar 24 08:01 db1
-rw-r--r--. 1 root root 5481 Mar 24 08:23 db_databases
-rw-r--r--. 1 root root 2595 Mar 24 08:22 dbschool_student
-rw-r--r--. 1 root root 1338 Mar 24 08:20 dbzip
drwx------. 2 root root 168 Mar 24 08:39 mydumper_db
-rw-r--r--. 1 root root 2520 Mar 24 08:26 school_stru_table
[root@localhost backup]# cd mydumper_db/
[root@localhost mydumper_db]# ll
total 24
-rw-r--r--. 1 root root 178 Mar 24 08:39 metadata
-rw-r--r--. 1 root root 90 Mar 24 08:39 school-schema-create.sql
-rw-r--r--. 1 root root 367 Mar 24 08:39 school.score-schema.sql
-rw-r--r--. 1 root root 352 Mar 24 08:39 school.score.sql
-rw-r--r--. 1 root root 413 Mar 24 08:39 school.student-schema.sql
-rw-r--r--. 1 root root 503 Mar 24 08:39 school.student.sql
15.使用myloader恢复数据库
mysql [school]>drop database school;
Query OK, 2 rows affected (0.01 sec)
myloader -u root -p 123456 -S /tmp/mysql.sock -d /backup/mydumper_db/ -B
school