zoukankan      html  css  js  c++  java
  • 服务器迁移--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 = 字节数

  • 相关阅读:
    VBS处理AD帐号密码到期提醒的脚本[zt]
    简单几步手工扩容LVM、缩小LVM及移除磁盘(笔记)
    python加入进度条:tqdm 和 progressbar
    python的map和reduce函数
    python的lambda表达式
    python的推导式 —— 列表推导式、集合和字典推导式
    Pyspark中遇到的 java.io.IOException: Not a file 和 pyspark.sql.utils.AnalysisException: 'Table or view not found
    pyecharts绘制map地图
    pyecharts绘制geo地图
    sklearn.feature_extraction.text 的TfidfVectorizer函数
  • 原文地址:https://www.cnblogs.com/cui0614/p/14416175.html
Copyright © 2011-2022 走看看