img

MySQL数据库的备份和还原

旁观者 1年前 ⋅ 998 阅读

mysql数据库的备份和还原,使用mysqldump进行数据库备份(用于mysql备份脚本等),已经命令行还原数据库,常用命令包括

一.备份

1.基础

-h[host](--host[=host]) 主机名(默认localhost)

-P[port](--port[=port]) 端口(默认3306)

-u[user](--user[=user]) 用户名

-p[password](--password[=password]) 密码

-d(--no-data) 只导出结构

-A(--all-databases) 备份所有数据库

-B(--databases) 数据库名(多个)

-f(--force) 遇到错误继续

-q(--quick) 快速导出

--tables 导出表覆盖--databases选项,后面所跟参数被视作表名

2.进阶

-n(--no-create-db) 只导出数据,而不添加CREATE DATABASE 语句。

-t(--no-create-info) 只导出数据,而不添加CREATE TABLE 语句。

--opt 等同于--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 默认开启

--skip-opt 禁用opt

--extended-insert 使用包含多个值列表的多行INSERT。

--set-charset 输出SET NAMES default_character_set 默认为打开

--skip-set-charset 关闭set-charset

--add-drop-database 添加drop数据库语句。默认为打开

--skip-add-drop-database 取消选项

--add-drop-table drop数据表语句。默认为打开

--skip-add-drop-table 取消选项

--add-locks 在INSERT前后分别加LOCK TABLES和UNLOCK TABLES。

--skip-add-locks 取消选项

--comments 为备份文件添加注释。

--compact 禁用结构化注释及首尾结构体

--complete-insert 使用带有列名的完整INSERT。

--default-character-set[=charset_name] 设置默认字符集

--lock-tables 备份前锁定表

--routines 备份routines(存储过程和函数)

备份脚本脚本:

#!/bin/bash
#定义备份参数
dbhost=localhost
dbport=3306
dbname=blog
dbuser=root
dbpasswd=123456
backuppath=/.../db_backup/
logfile=/.../db_backup/db_backup.log
now=`date +%Y-%m-%d`
dumpfile=$dbname-$now
#使用下面函数备份数据库
back_db(){
echo "------"$(date +%Y-%m-%d%t%A%t%T)" Beginning database "${dbname}" backup--------" >>${logfile}
mysqldump --skip-opt --host=${dbhost} --port=${dbport} -u${dbuser} -p${dbpasswd} --default-character-set=utf8mb4 --quick --force --routines --add-drop-database --add-drop-table --databases ${dbname} >${backuppath}${dumpfile}.sql 2>> ${logfile}
echo "mysqldump --skip-opt --host=${dbhost} --port=${dbport} -u${dbuser} -p${dbpasswd} --default-character-set=utf8 --quick --force --routines --add-drop-database --add-drop-table --databases ${dbname} >${backuppath}${dumpfile}.sql 2>> ${logfile}"
tar zcvf ${dumpfile}.tar.gz ${dumpfile}.sql && rm ${dumpfile}.sql 2>> ${logfile}
}
#删除一周前的备份文件
rm_oldfile(){
find ${backuppath} -type f -mtime +7 -exec rm {} \;
}
cd ${backuppath}
back_db
rm_oldfile

二.还原

1.还原全部数据库: mysql命令行: mysql>source f:\all.sql

系统命令行: mysql -uroot -p123456 <f:\all.sql

2.指定数据库

mysql命令行: mysql>use db mysql>source f:\db.sql 系统命令行: mysql -uroot -p123456 db <f:\db.sql


全部评论: 0

    我有话说: