MySQL数据库备份

一、SQL语句备份

// MySQL当前数据库中备份某一张表
CREATE TABLE TB_MZ_CFZB_2019 SELECT * FROM TB_MZ_CFZB;

二、使用mysqldump进行备份和还原

1、mysqldump备份

mysqldump是一个数据库备份程序,mysqldump执行文件在安装目录bin下面

// 1.备份全部数据库的数据和结构
mysqldump -uroot -proot -A > /data/mysql-bak/test_db.sql

// 2.备份全部数据库的结构(加 -d 参数)
mysqldump -uroot -proot -A -d > /data/mysql-bak/test_db.sql

// 3.备份全部数据库的数据(加 -t 参数)
mysqldump -uroot -proot -A -t > /data/mysql-bak/test_db.sql

// 4.备份单个数据库的数据和结构(数据库名test_db)
mysqldump -uroot-proot test_db > /data/mysql-bak/test_db.sql

// 5.备份单个数据库的结构
mysqldump -uroot -proot test_db -d > /data/mysql-bak/test_db.sql

// 6.备份单个数据库的数据
mysqldump -uroot -proot test_db -t > /data/mysql-bak/test_db.sql

// 7.备份多个表的数据和结构(数据,结构的单独备份方法与上同)
mysqldump -uroot -proot test_db t1 t2 > /data/mysql-bak/test_db.sql

// 8.一次备份多个数据库
mysqldump -uroot -proot --databases db1 db2 > /data/mysql-bak/test_db.sql

2、mysql数据库还原

两种方法:
第一种方法:mysql命令行source方法
第二种方法:系统命令行方法
具体的操作如下所示:

// 1.不指定数据库(主要针对全部数据库备份的还原):
(1) mysql命令行:mysql>source /data/mysql-bak/test_db.sql
(2) 系统命令行: mysql -uroot -p123456 </data/mysql-bak/test_db.sql

// 2.指定数据库(指定数据库备份的还原)
(1) mysql命令行
mysql>use mydb
mysql>source /data/mysql-bak/test_db.sql

(2) 系统命令行
mysql -uroot -p123456 mydb </data/mysql-bak/test_db.sql

3、备份脚本编写

vim mysql_backup_script.sh

#!/bin/bash

#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/incitedata/docker/productEnv/SYJG-ZXYY/mysql-bak
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=mysqldump
#用户名
username=root
#密码
password=root
#需要备份的数据库
database_name=MEDICAL_SUPERVISION
#如果文件夹不存在则创建
if [ ! -d $backup_dir ]; 
then     
    mkdir -p $backup_dir; 
fi

#简单写法  mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
$tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql

#写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt

#找出需要删除的备份
delfile=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt  $backup_dir/*.sql | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

4、备份脚本赋予执行权限

chmod +x mysql_backup_script.sh

5、设置定时任务

systemctl status crond
crontab -l
新增调度任务可用两种方法
1)在命令行输入: crontab -e回车,然后添加相应的任务,wq存盘退出。
2)直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
第一步:crontab -e回车,然后输入
0 5 * * * /root/mysql_backup_script.sh
第二步:wq保存 crontab -l 查看是否添加成功

三、mysqldump 命令参数

--host=host_name, -h host_name
MySQL 数据库主机地址,默认为 localhost。
示例:mysqldump -uroot -p --host=localhost --all-databases

--port=port_num, -P port_num
连接数据库端口号

--user=user_name, -u user_name
指定连接数据库的用户名。

--password[=password], -p[password]
连接数据库的密码

--all-databases, -A
导出全部数据库的全部表。示例:mysqldump -uroot -p --all-databases

--databases, -B
导出几个数据库。参数后面所有名字参量都被看作数据库名。
示例:mysqldump -uroot -p --databases test mysql

--single-transaction
该选项在导出数据之前,设置事务隔离模式为 REPEATABLE READ,并提交一个 START TRANSACTION SQL 语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。
它只适用于 InnoDB。
本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 --quick 选项。
示例:mysqldump -uroot -p --host=localhost --all-databases --single-transaction

--tables
覆盖 --databases 或 -B 参数,指定需要导出的表名。
示例:mysqldump -uroot -p --host=localhost --databases test --tables test

--all-tablespaces, -Y
导出全部表空间。示例:mysqldump -uroot -p --all-databases --all-tablespaces

--no-tablespaces, -y
不导出任何表空间信息。示例:mysqldump -uroot -p --all-databases --no-tablespaces

--add-drop-database
每个数据库创建之前添加 drop 数据库语句。
示例:mysqldump -uroot -p --all-databases --add-drop-database

--add-drop-table
每个数据表创建之前添加 drop 数据表语句。
默认为打开状态,使用 --skip-add-drop-table 取消选项。
示例:mysqldump -uroot -p --all-databases --skip-add-drop-table (取消drop语句)

--add-locks
在每个表导出之前增加 LOCK TABLES 并且之后 UNLOCK TABLES。
默认为打开状态,使用 --skip-add-locks 取消选项。
示例:mysqldump -uroot -p --all-databases (默认添加 LOCK 语句);
mysqldump -uroot -p --all-databases --skip-add-locks (取消 LOCK 语句)

--allow-keywords
允许创建是关键词的列名字。它由列名前冠以表名实现。
示例:mysqldump -uroot -p --all-databases --allow-keywords

--apply-slave-statements
在从库导出时,在 'CHANGE MASTER' 前添加 'STOP SLAVE',并且在导出的最后添加'START SLAVE'。
示例:mysqldump -uroot -p --all-databases --apply-slave-statements

--character-sets-dir=dir_name
字符集文件的目录。
示例:mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets

--comments, -i
附加注释信息,默认为打开,可以用 --skip-comments 取消。
示例:mysqldump -uroot -p --all-databases (默认记录注释);
mysqldump -uroot -p --all-databases --skip-comments (取消注释)

--compatible=name
导出的数据将和其它数据库或旧版本的 MySQL 相兼容。
值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等。
要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。
示例:mysqldump -uroot -p --all-databases --compatible=ansi

--compact
导出更少的输出信息(用于调试)。去掉注释和头尾等结构。该选项使 --skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys 生效。
示例:mysqldump -uroot -p --all-databases --compact

--complete-insert,  -c
使用完整的 insert 语句(包含列名称)。
这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。
示例:mysqldump -uroot -p --all-databases --complete-insert

--compress, -C
在客户端和服务器之间启用压缩传递所有信息。
示例:mysqldump -uroot -p --all-databases --compress

--create-options
在 CREATE TABLE 语句中包括所有 MySQL 特性选项(默认为打开状态)。
示例:mysqldump -uroot -p --all-databases

--debug[=debug_options], -# [debug_options]
输出 debug 信息,用于调试。默认值为:d:t:o,/tmp/mysqldump.trace。
示例:mysqldump -uroot -p --all-databases --debug;
mysqldump -uroot -p --all-databases --debug=” d:t:o,/tmp/debug.trace”

--debug-check
程序退出时,打印一些调试信息。
示例:mysqldump -uroot -p --all-databases --debug-check

--debug-info
程序退出时,打印调试信息和内存、CPU 使用数据。
示例:mysqldump -uroot -p --all-databases --debug-info

--default-character-set
设置默认字符集,默认值为 utf8。
示例:mysqldump -uroot -p --all-databases --default-character-set=latin1

--delete-master-logs
master 备份后删除日志。这个参数将自动激活 --master-data。
示例:mysqldump -uroot -p --all-databases --delete-master-logs

--disable-keys, -K
对于每个表,在 INSERT 语句前后使用 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; 和 /*!40000 ALTER TABLE tbl_name ENABLE KEYS */;。
这样可以更快地导入 dump 出来的文件,因为它是在插入所有行后创建索引。该选项只适合 MyISAM 表,默认为打开状态。
示例:mysqldump -uroot -p --all-databases 

--dump-slave[=value]
该选项将导致主的 binlog 位置和文件名追加到导出数据的文件中。
设置为 1 时,将会以 CHANGE MASTER 命令输出到数据文件;设置为 2 时,在命令前增加说明信息。
该选项将会打开--lock-all-tables,除非 --single-transaction 被指定。
该选项会自动关闭 --lock-tables 选项。默认值为0。
示例:mysqldump -uroot -p --all-databases --dump-slave=1

--events, -E
导出事件。示例:mysqldump -uroot -p --all-databases --events

--extended-insert, -e
使用具有多个 VALUES 列的 INSERT 语法。这样使导出文件更小,并加快导入时的速度。
默认为打开状态,使用 --skip-extended-insert 取消选项。
示例:mysqldump -uroot -p --all-databases;
mysqldump -uroot -p --all-databases--skip-extended-insert (取消选项)

--fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=...
这些选项和 --tab 选项一起使用,和 LOAD DATA INFILE 的 FIELDS 语法类似。
--fields-terminated-by 列以指定符合分隔。
--fields-enclosed-by 输出文件中的各个字段用指定字符包裹。
--fields-optionally-enclosed-by 输出文件中的各个字段用给定字符选择性包裹。
--fields-escaped-by 输出文件中的各个字段忽略给定字符。
不能用于 --databases 和 --all-databases 选项。
示例:mysqldump -uroot -p test test --tab=”/home/mysql” --fields-terminated-by=”#” --fields-enclosed-by=”#” --fields-optionally-enclosed-by=”#” --fields-escaped-by=”#”

--flush-logs, -F
开始导出之前刷新日志。
请注意:假如一次导出多个数据库(使用选项 --databases 或者 --all-databases),将会逐个数据库刷新日志。
当使用 --lock-all-tables 或者 --master-data 时,只刷新一次日志,相应的所有表同时被加上读锁。
因此,如果你想导出操作和刷新日志操作发生在同一时刻,应该将 --flush-logs 和 --lock-all-tables,--master-data 一起使用,或者 --flush-logs 和 --single-transaction 一起使用。
示例:mysqldump -uroot -p --all-databases --flush-logs

--flush-privileges
在导出 mysql 数据库之后,发出一条 FLUSH PRIVILEGES 语句。
为了正确恢复,该选项应该用于导出 mysql 数据库和依赖 mysql 数据库数据的任何时候。
示例:mysqldump -uroot -p --all-databases --flush-privileges

--force, -f
在导出过程中忽略出现的 SQL 错误。
示例:mysqldump -uroot -p --all-databases --force

--help, -?
显示帮助信息并退出。示例:mysqldump --help

--hex-blob
使用十六进制格式导出二进制字段。如果有二进制数据就必须使用该选项。
影响到的字段类型有BINARY、VARBINARY、BLOB。
示例:mysqldump -uroot -p --all-databases --hex-blob

--ignore-table
不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。
例如:--ignore-table=database.table1 --ignore-table=database.table2。
示例:mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user

--include-master-host-port
在 --dump-slave 产生的 'CHANGE MASTER TO..' 语句中增加 'MASTER_HOST=<host>,MASTER_PORT=<port>'。
示例:mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port

--insert-ignore
在插入行时使用 INSERT IGNORE 语句。
示例:mysqldump -uroot -p --host=localhost --all-databases --insert-ignore

--lines-terminated-by
输出文件的每行用给定字符串划分。
与 --tab 选项一起使用,不能用于 --databases 和 --all-databases 选项。
示例:mysqldump -uroot -p --host=localhost test test --tab=”/tmp/mysql” --lines-terminated-by=”##”

--lock-all-tables, -x
提交请求锁定所有数据库中的所有表,以保证数据的一致性。
这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。
示例:mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables

--lock-tables, -l
开始导出前,锁定所有表。用 READ LOCAL 锁定表以允许 MyISAM 表并行插入。
对于支持事务的表,例如 InnoDB,--single-transaction 是一个更好的选择,因为它根本不需要锁定表。
请注意,当导出多个数据库时,--lock-tables 分别为每个数据库锁定表。
因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。
示例:mysqldump -uroot -p --host=localhost --all-databases --lock-tables

--log-error
附加警告和错误信息到给定文件。
示例:mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err

--master-data
该选项将 binlog 的位置和文件名追加到输出文件中。
如果为 1,将会输出 CHANGE MASTER 命令;
如果为 2,输出的 CHANGE MASTER 命令前添加注释信息。
该选项将打开 --lock-all-tables 选项,除非 --single-transaction 也被指定
(在这种情况下,全局读锁在开始导出时获得很短的时间;
其他内容参考 --single-transaction 选项)。
该选项自动关闭 --lock-tables选项。
示例:mysqldump -uroot -p --host=localhost --all-databases --master-data=1

max_allowed_packet
客户端/服务器通信的最大 buffer size。默认值为 24MB,最大值为 1GB。
示例:mysqldump -uroot -p --host=localhost --all-databases max_allowed_packet=10240

net_buffer_length
TCP/IP 和 socket 连接的缓存大小。
示例:mysqldump -uroot -p --host=localhost --all-databases net_buffer_length=1024

--no-autocommit
使用 autocommit/commit 语句包裹表。
示例:mysqldump -uroot -p --host=localhost --all-databases --no-autocommit

--no-create-db, -n
只导出数据,而不添加 CREATE DATABASE 语句。
示例:mysqldump -uroot -p --host=localhost --all-databases --no-create-db

--no-create-info, -t
只导出数据,而不添加 CREATE TABLE 语句。
示例:mysqldump -uroot -p --host=localhost --all-databases --no-create-info

--no-data, -d
不导出任何数据,只导出数据库表结构。
示例:mysqldump -uroot -p --host=localhost --all-databases --no-data

--no-set-names, -N
关闭 --set-charset 设置,等同于 --skip-set-charset。
示例:mysqldump -uroot -p --host=localhost --all-databases --no-set-names

--opt
等同于 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset。
该选项默认开启,可以用 --skip-opt 禁用。
示例:mysqldump -uroot -p --host=localhost --all-databases --opt

--skip-opt
禁用 --opt 选项。
示例:mysqldump -uroot -p --host=localhost --all-databases --skip-opt

--order-by-primary
按主键导出每个表的记录,或者按照第一个唯一键,对每个表的记录进行排序。
在导出 MyISAM 表到 InnoDB 表时有用,但会使得导出工作花费很长时间。
示例:mysqldump -uroot -p --host=localhost --all-databases --order-by-primary

--pipe, -W 
在 windows 系统,使用命名管道连接 mysql。该选项只适用于服务器支持命名管道连接的情况。
示例:mysqldump -uroot -p --host=localhost --all-databases --pipe

--protocol={TCP|SOCKET|PIPE|MEMORY}
使用的连接协议,包括:tcp, socket, pipe, memory。
示例:mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp

--quick, -q
不缓冲查询,直接导出到标准输出。默认为打开状态,使用 --skip-quick 取消该选项。
示例:mysqldump -uroot -p --host=localhost --all-databases;
mysqldump -uroot -p --host=localhost --all-databases --skip-quick

--quote-names, -Q
使用(`)引起表和列名。默认为打开状态,使用 --skip-quote-names 取消该选项。
示例:mysqldump -uroot -p --host=localhost --all-databases;
mysqldump -uroot -p --host=localhost --all-databases --skip-quote-names

--replace
使用 REPLACE INTO 取代 INSERT INTO。
示例:mysqldump -uroot -p --host=localhost --all-databases --replace

--result-file=file_name, -r file_name
直接输出到指定文件中。该选项应该用在使用回车换行的系统上(例如:DOS,Windows)。
该选项确保只有一行被使用。
示例:mysqldump -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt

--routines, -R
导出存储过程以及自定义函数。
示例:mysqldump -uroot -p --host=localhost --all-databases --routines

--set-charset
添加 'SET NAMES default_character_set' 到输出文件。
默认为打开状态,使用 --skip-set-charset 关闭选项。
示例:mysqldump -uroot -p --host=localhost --all-databases;
mysqldump -uroot -p --host=localhost --all-databases --skip-set-charset

--dump-date
将导出时间添加到输出文件中。默认为打开状态,使用 --skip-dump-date 关闭选项。
示例:mysqldump -uroot -p --host=localhost --all-databases;
mysqldump -uroot -p --host=localhost --all-databases --skip-dump-date

--socket, -S
指定连接 mysql 的 socket 文件位置,默认路径 /tmp/mysql.sock。
示例:mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock

--tab=dir_name, -T dir_name
为每个表在给定路径创建 tab 分割的文本文件。
注意:仅仅用于 mysqldump 和 mysqld 服务器运行在相同机器上。
示例:mysqldump -uroot -p --host=localhost test test --tab="/home/mysql"

--where='where_condition', -w 'where_condition'
只转储给定的 WHERE 条件选择的记录。
请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。
示例:mysqldump -uroot -p --host=localhost --all-databases --where=” user=’root’”

--triggers
导出触发器。该选项默认启用,用 --skip-triggers 禁用它。
示例:mysqldump -uroot -p --host=localhost --all-databases --triggers

--tz-utc
在导出顶部设置时区 TIME_ZONE='+00:00',以保证在不同时区导出的 TIMESTAMP 数据或者
数据被移到其他时区时的正确性。
示例:mysqldump -uroot -p --host=localhost --all-databases --tz-utc

--verbose, -v
输出多种平台信息。

--version, -V
输出 mysqldump 版本信息并退出。

--xml, -X
导出 XML 格式。
示例:mysqldump -uroot -p --host=localhost --all-databases --xml

--set-gtid-purged=value
该选项通过是否添加 SET @@global.gtid_purged 语句来控制是否向导出文件中写入全局事务ID(GTID)。
这个选项还可能导致在输出中写入一条语句,该语句在重新加载转储文件时禁用二进制日志记录。
该选项的值可能为:OFF、ON、AUTO。默认值为 AUTO。
各项取值含义如下所示:
OFF:不向输出文件中添加 SET 命令(跳过导 gtid);
ON:向输出文件中添加 SET 命令。如果服务端不支持 GTIDs 会报错;
AUTO:如果服务端支持 GTIDs,会向输出文件中添加 SET 命令。

四、参考博文

MySQL定时备份数据库(全库备份)
mysqldump 命令参数大全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值