备份、清空、还原mysql数据库
下面用到的参数
# 定义MySQL容器的名称或者ID
MYSQL_CONTAINER="mariadb"
# 定义MySQL的用户名和密码
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
# 定义数据库名
DATABASE_NAME="mydatabase"
# 定义SQL文件路径
CREATE_SQL_FILE="./database_backup/create.sql"
INSERT_SQL_FILE="./database_backup/insert.sql"
> 1、备份
- 备份整个数据库
docker exec -i $MYSQL_CONTAINER /usr/bin/mysqldump --column-statistics=0 -u $MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME > $CREATE_SQL_FILE
- 分开备份:1.备份表结构 2.备份表数据
#备份表结构 添加参数--no-data
docker exec -i $MYSQL_CONTAINER /usr/bin/mysqldump --column-statistics=0 --no-data -u $MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME > $CREATE_SQL_FILE
#备份表数据 添加参数--no-create-info
docker exec -i $MYSQL_CONTAINER /usr/bin/mysqldump --column-statistics=0 --no-create-info -u $MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME > $INSERT_SQL_FILE
>2、清空数据库数据
构造一个脚本,用于清空所有表的数据
TRUNCATE_TABLES_SQL="SET FOREIGN_KEY_CHECKS=0; $(mysql -h 127.0.0.1 -u $MYSQL_USER -p$MYSQL_PASSWORD -Nse 'SHOW TABLES' $DATABASE_NAME | xargs -I {} echo "TRUNCATE TABLE {};" | tr '\n' ';')";
TRUNCATE_TABLES_SQL="${TRUNCATE_TABLES_SQL}; SET FOREIGN_KEY_CHECKS=1;"
docker exec -i $MYSQL_CONTAINER mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME <<< "$TRUNCATE_TABLES_SQL"
>3、还原整个数据库
- 只还原数据(使用insert.sql)
docker exec -i $MYSQL_CONTAINER mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME < $INSERT_SQL_FILE
- 删除数据库再重建(使用create.sql和insert.sql)
删除数据库
docker exec -i $MYSQL_CONTAINER mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "DROP DATABASE IF EXISTS $DATABASE_NAME;"
创建数据库
docker exec -i $MYSQL_CONTAINER mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DATABASE_NAME;"
使用create.sql创建表结构
docker exec -i $MYSQL_CONTAINER mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME < $CREATE_SQL_FILE
使用insert.sql插入数据
docker exec -i $MYSQL_CONTAINER mysql -u $MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME < $INSERT_SQL_FILE