以下备份脚本可一键导出MySQL数据库数据,操作步骤如下(使用的是MySQL 5.7.21版本):
1、将脚本保存至~/bin/dbdump.sh
2、在Linux ~/.profile或者.bash_profile用户环境初始化文件中增加如下内容(环境变量内容视情况而定):
附:导出脚本如下,请复制并保存至~/bin/dbdump.sh
#!/usr/bin/env bash
### file name:dbdump.sh,save to ~/bin,and add $HOME/bin PATH to ~/.bash_profile or ~/.profile
### usage: dbdump.sh all or 1:with data,dbdump.sh none or 2:without data
####################################################################
## add these environment parameters to ~/.bash_profile or ~/.profile
# export ENV=数据库
# export db_host=数据库地址
# export db_port=数据库端口
# export db_user=数据库用户名
# export db_schema= 数据库用户名
# export BACKUP_PATH=/data/docker/container/mysql/backup
# export PATH=$HOME/bin:$PATH
####################################################################
date=`date "+%Y%m%d"`
error_log=${ENV}_dbdump_error.log
mkdir -p $BACKUP_PATH
cd $BACKUP_PATH
exec_dump() {
echo
echo "-- ${ENV} `date +%F\ %T` Database ${db_schema} dump to ${dump_file} start ..."
if [ -f ${dump_file} ]; then
rm -f ${dump_file}
fi
if [ "v${no_data}" == "v" ]; then
echo "mysqldump --add-drop-table --set-gtid-purged=OFF -h ${db_host} -u ${db_user} -P ${db_port} -p -R ${db_schema} 2> ${error_log} | gzip > ${dump_file}"
mysqldump --add-drop-table --set-gtid-purged=OFF -h ${db_host} -u ${db_user} -P ${db_port} -p -R ${db_schema} 2> ${error_log} | gzip > ${dump_file}
else
echo "mysqldump ${no_data} --add-drop-table --set-gtid-purged=OFF -h ${db_host} -u ${db_user} -P ${db_port} -p -R ${db_schema} 2> ${error_log} | sed 's/AUTO_INCREMENT=[0-9]*\s*//g' | gzip > ${dump_file}"
mysqldump ${no_data} --add-drop-table --set-gtid-purged=OFF -h ${db_host} -u ${db_user} -P ${db_port} -p -R ${db_schema} 2> ${error_log} | sed 's/AUTO_INCREMENT=[0-9]*\s*//g' | gzip > ${dump_file}
fi
if [ -s ${error_log} ] ; then
rm -f ${dump_file}
cat ${error_log}
echo
echo "-- ${ENV} `date +%F\ %T` Database ${db_schema} dump error."
exit 1
else
rm -f ${link_file}
ln -s ${dump_file} ${link_file}
echo
echo "-- ${ENV} `date +%F\ %T` Database ${db_schema} dump to ${dump_file} finished ."
fi
}
exec_dump_without_data() {
no_data='--no-data'
exec_dump
}
if [ x$1 != x ]; then
dump_type=$1
else
read -p "
Which dump type do you want?
1> all (with data)
2> none structure only (no data)
Input dump type: [1|2] > " dump_type
fi
case ${dump_type} in
1|all)
link_file=${db_schema}_dump_with_data.sql.gz
dump_file=${date}_${link_file}
exec_dump
;;
2|none)
link_file=${db_schema}_dump_without_data.sql.gz
dump_file=${date}_${link_file}
exec_dump_without_data
;;
*)
echo "dump type error, nothing going to do."
exit 1
;;
esac
执行导出操作:
#导出数据库全部数据
dbdump.sh all
dbdump.sh 1
#导出数据结构(不包含数据)
dbdump.sh none
dbdump.sh 2
输入密码后数据库备份文件将导出至BACKUP_PATH目录中。
用dbdump.sh all 生成一个.gz数据压缩文件
sftp IP地址 连接到对应IP数据库服务器上,将gz压缩文件传输过去
gunzip *.gz文件 解压数据文件
如果默认存储目录容量不够
修改数据库数据存储目录
mysql -uroot -p 登录mysql
select @@datadir; 查看当前数据存储目录
sudo service mysqld stop
停止数据库服务
在内容空间充足的目录下 创建存储目录,例如:/data
cp /var/lib/mysql /data
vim /etc/my.cnf
[client]
port=3306
socket=/data/mysql/mysql.sock
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
启动服务
sudo service mysqld start
再次登录mysql中 验证存储目录是否更改
更改成功后,在解压缩的sql目录下 执行这个命令
nohup mysql -u数据库账号 -p'数据库密码' 数据库 < *.sql &
ps -ef | grep mysql
查看数据库进程,会有进程在跑