Mysql数据库备份练习

文章详细介绍了mysqldump工具在备份MySQL数据库时使用的各种选项,如--add-drop-table、--tab、--quick等,以及如何备份特定数据库、表结构、数据。还演示了如何恢复数据库,包括解压压缩备份和使用xtrabackup、mydumper进行备份和恢复的过程。
摘要由CSDN通过智能技术生成

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

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值