mysqldump
mysqldump
для передачи храненияmysql
Утилиты базы данных.
в основном производитSQL
Скрипт, содержащий все команды для воссоздания базы данных с нуля.
Процесс экспорта скрипта составляет примерно следующим образом: создайте оператор оценки базы данных, удалить таблицу, создать таблицу, заблокировать таблицу, отключить индекс, вставить данные, включить индекс и разблокировать таблицу.
быстрый в использовании
# game 是库名
# 完整导出一个库
# 包括建库语句、表结构、数据
mysqldump -uroot -proot --host=127.0.0.1 --port=3306 --databases game > test.sql
# 只导出表结构
mysqldump -uroot -proot --host=127.0.0.1 --port=3306 -d game > test.sql
# 只导出数据
mysqldump -uroot -proot --host=127.0.0.1 --port=3306 -t game > test.sql
# 导出一个数据库中多个表的数据和结构
mysqldump -uroot -proot --host=127.0.0.1 game --tables articles users > test.sql
mysqldump -uroot -proot --host=127.0.0.1 game articles users > test.sql
# 恢复导出数据
mysql -u username -proot databse < backup.sql
параметр
--user=user_name, -u user_name
Имя пользователя для подключения к базе данных.
--password=password, -p[password]
Пароль для подключения к базе данных, если используется-p
Аббревиатура и без пробела между паролем.
--opt or --compact
- использовать
--opt
эквивалентно использованию этих параметров--add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, and --set-charset
, по умолчанию даже без добавления--opt
параметры также включены. - использовать
--compact
эквивалентно использованию этих параметров--skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, and --skip-set-charset
, который по умолчанию отключен.
--databases, -B
Указывает имя экспортируемой библиотеки.
--all-databases
Указывает на экспорт всех библиотек.
--tables
Переопределяет параметр --databases или -B, указывая, что при экспорте таблицы будет игнорироваться параметр библиотеки.
--no-data, -d
Данные не экспортируются, экспортируется только структура таблицы.
Do not dump table contents
--no-create-info, -t
Экспортировать только данные, не экспортировать структуру таблицы, не добавлятьCREATE TABLE
утверждение.
--no-create-db, -n
не добавленоCREATE DATABASE
Заявление о сборке.
--routines, -R
Экспорт хранимых процедур и пользовательских функций
пример
// 导出一个数据库
// 包括建库语句、删表语句、建表语句、插入数据
mysqldump -uroot -proot --host=127.0.0.1 --port=3306 --databases game > test.sql
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `game` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `game`;
--
-- Table structure for table `address`
--
DROP TABLE IF EXISTS `address`;
CREATE TABLE `address` (
...
)
LOCK TABLES `address` WRITE;
/*!40000 ALTER TABLE `address` DISABLE KEYS */;
INSERT INTO ...
/*!40000 ALTER TABLE `address` ENABLE KEYS */;
UNLOCK TABLES;
...
// -d 不导出数据,导出所有的建表删表语句,不包括建库语句,
mysqldump -uroot -proot --host=127.0.0.1 --port=3306 -d game > test.sql
DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
...
)
// -t 不导出结构,导出所有表中的数据,不包括建库语句,都是插入语句
mysqldump -uroot -proot --host=127.0.0.1 --port=3306 -t game > test.sql
LOCK TABLES `address` WRITE;
/*!40000 ALTER TABLE `address` DISABLE KEYS */;
/*!40000 ALTER TABLE `address` ENABLE KEYS */;
UNLOCK TABLES;
// 导出一个数据库的表结构以及数据,不包括建库语句
mysqldump -uroot -proot --host=127.0.0.1 --port=3306 game > test.sql
// 导出多个数据库的表结构以及数据,包括建库语句
mysqldump -uroot -proot --host=127.0.0.1 -B game game2 > test.sql
// 导出多个数据库的结构,包括建库语句
mysqldump -uroot -proot --host=127.0.0.1 -d -B game game2 > test.sql
// 导出多个数据库的数据,包括建库语句
mysqldump -uroot -proot --host=127.0.0.1 -t -B game game2 > test.sql
экспортировать таблицу
// 导出一个数据库中一个表的结构,导出 articles 表的结构和数据
mysqldump -uroot -proot --host=127.0.0.1 game articles > test.sql
// 导出一个数据库中多个表的数据和结构
mysqldump -uroot -proot --host=127.0.0.1 game --tables articles users > test.sql
mysqldump -uroot -proot --host=127.0.0.1 game articles users > test.sql
// 导出一个数据库中多个表的结构
mysqldump -uroot -proot --host=127.0.0.1 -d game articles users > test.sql
// 导出一个数据库中多个表的数据
mysqldump -uroot -proot --host=127.0.0.1 -t game articles users > test.sql
Условный экспорт таблицы данных
// 导出 articles 表 id = 1 的数据
mysqldump -uroot -proot --host=127.0.0.1 --where='id=1' game articles > test.sql
игнорировать стол
--ignore-table database.tableName
Множественные добавления игнорируют несколько таблиц.
импортировать сценарий табличных данных
# 数据来源
src_user="root" # 用户名
src_password="root" # 密码
src_host="localhost" # Host
src_port="3306" # 端口
src_database="test" # 数据库名
src_table="edu" # 表名
# 数据导入的数据库配置
dst_user="root" # 用户名
dst_password="root" # 密码
dst_host="localhost" # Host
dst_port="3306" # 端口
dst_database="test" # 数据库名
mysqldump --host=$src_host --port=$src_port -u$src_user -p$src_password $src_database --tables $src_table | mysql --host=$dst_host --port=$dst_port -u$dst_user -p$dst_password $dst_database
Сценарий резервного копирования
#!/bin/bash
# 以下配置信息请自己修改
mysql_user="root" #MySQL备份用户
mysql_password="root" #MySQL备份用户的密码
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8mb4" #MySQL编码
backup_db_arr=("db1" "db2") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/var/www/mysql #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="OFF" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=3 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
# 本行开始以下不需要修改
backup_time=`date +%Y%m%d%H%M` #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期
backup_dir=$backup_location/$backup_Ymd #备份文件夹全路径
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
# 判断MYSQL是否启动,mysql没有启动则备份退出
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!"
exit
else
echo $welcome_msg
fi
# 连接到mysql数据库,无法连接则备份退出
mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end
flag=`echo $?`
if [ $flag != "0" ]; then
echo "ERROR:Can't connect mysql server! backup stop!"
exit
else
echo "MySQL connect ok! Please wait......"
# 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
if [ "$backup_db_arr" != "" ];then
#dbnames=$(cut -d ',' -f1-5 $backup_database)
#echo "arr is (${backup_db_arr[@]})"
for dbname in ${backup_db_arr[@]}
do
echo "database $dbname backup start..."
`mkdir -p $backup_dir`
`mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz`
flag=`echo $?`
if [ $flag == "0" ];then
echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
else
echo "database $dbname backup fail!"
fi
done
else
echo "ERROR:No database to backup! backup stop"
exit
fi
# 如果开启了删除过期备份,则进行删除操作
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
#`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
`find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
echo "All database backup success! Thank you!"
exit
fi
Измените свойства сценария оболочки:
chmod 600 /root/mysql_backup.sh
chmod +x /root/mysql_backup.sh
После настройки свойств добавьте команду вcrontab
, установить ежедневно00:00
Автоматическое резервное копирование по расписанию.
00 00 * * * /path/to/mysql_backup.sh
восстановление резервной копии
mysql -u username -proot databse < backup.sql
// 和建库语句一起导入
mysql -uroot -proot --host=127.0.0.1 --port=33006 < global.sql
或者
mysql -u root -p
use dbname;
source dbname.sql