服务器迁移--MySQL数据库迁移

最近公司服务器到期,需要迁移到新服务器上,为了以后不再麻烦,所以把所有用到的软件使用Docker部署起来,先来处理数据库。此处不再详解Docker的安装,网上有很多。

一.MySQL数据库的部署

首先来安装MySQL

创建持久化文件

mkdir -p /u01/mysql/data && mkdir -p /u01/mysql/conf

部署mysql

docker run -d --name mysql -v /u01/mysql/data:/var/lib/mysql -v /u01/mysql/conf:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=数据库密码 -e TZ="Asia/Shanghai" -p 3306:3306 mysql:5.7.30 --lower_case_table_names=1 --default-time_zone='+8:00' --sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
  •  参数说明(注意:参数横线都为英文的短横线):
    • --name:部署MySQL的docker容器
    • -v:目录挂载
    • -e:指定环境变量参数-p:端口映射,前面为宿主机开放端口,后面为MySQL容器中开放给MySQL使用的端口
      • MYSQL_ROOT_PASSWORD:数据库密码
      • TZ:时区,国内一般使用的都是Asia/Shanghai
    • mysql:5.7.30:镜像版本,这里使用的是5.7
    • --lower_case_table_names=1:设置MySQL数据库不区分大小写
    • --default-time_zone='+8:00':设置MySQL时区
    • --sql_mode:定义了mysql应该支持的sql语法,数据校验等

其次,做数据库备份

 创建mysql_backup.sh

#!/bin/bash
#设置mysql的登录用户名和密码
mysql_user="root"
mysql_password="数据库密码"
mysql_host="IP地址"
mysql_port="数据库端口"
 
# 需要备份的数据库
#备份一个或者多个库,中间空格
#database="--databases 数据库1 数据库2"
#备份全部
database="--all-databases"
# mysql容器名称
docker_name="mysql容器名称"
# 备份文件存放地址(此处是我使用的地址,自行创建文件)
backup_location=/u01/backup/backupFile/mysql

# 是否删除过期数据
expire_backup_delete="ON"
#设置过期时长(天)
expire_days=10
backup_time=`date +%Y%m%d%H%M`
backup_dir=$backup_location
 
# 备份指定数据库中数据
docker exec ${docker_name} mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $database > $backup_dir/$backup_time.sql
 
 
# 删除过期数据
if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
        `find $backup_location -name "*.sql" -type f -mtime +$expire_days -exec rm -rf {} \; > /dev/null 2>&1`
        echo "Expired backup data delete complete!"
fi

# 下面两步如果不需要的话注释掉就可以了 # 打包 tar -czvf $backup_dir/$backup_time.sql.tar.gz –C $backup_dir/$backup_time.sql
# 发送邮件提醒 echo $(date +%F)"日MySQL数据库已完成备份!"|mail -s $(date +%F)"日数据库备份" xxxx@126.com

保存文件,并给文件赋权 chmod 777 mysql_backup.sh

增加Linux定时任务 crontab -e

1 0 * * * /u01/backup/mysql_backup.sh  #我这里是每天晚上12点备份文件

如果使用邮件提醒,则需要配置邮件信息(此处已126邮箱为例)

  • 开启服务POP3/SMTP服务,如图
  • 开启后会生成一个密匙,请拷贝下来,只会出现一次,别丢失了

  • 在Linux服务器中执行安装邮箱命令:yum -y install mailx
  • 修改文件,添加以下内容: vim /etc/mail.rc

 可能遇到的问题

  • 单独执行mysql_buckup.sh文件可以执行成功,但是通过定时任务时失败

    • 原因:使用docker exec 备份数据时不能加 -it ,刚开始部署时一直不成功,因为加这个参数就相当于开启了一个终端,计划任务是无法进入任何终端的
  • 发送邮件加附件时无法发送成功
    • 原因:邮件使用-a可以增加附件,如最后一行可以改为:echo $(date +%F)"日MySQL数据库已完成备份,具体内容见附件"|mail -s $(date +%F)"日数据库备份" -a $backup_dir/$backup_time.sql.tar.gz xxxx@126.com,但是当附件超过限制大小后会导致发送不成功,可以使用/usr/sbin/postconf | grep size命令查看限制,如果确实需要发送大文件,则可以修改配置文件,vim /etc/postfix/main.cf增加以下内容:

      mailbox_size_limit = 字节数
      message_size_limit = 字节数

posted @ 2021-02-19 16:58  砖治不服  阅读(269)  评论(0编辑  收藏  举报