当前位置 博文首页 > json_li的博客:Linux实现mysql备份和还原

    json_li的博客:Linux实现mysql备份和还原

    作者:[db:作者] 时间:2021-08-25 15:53

    在项目中,数据是很重要的,所以一定要做备份,防止意外导致数据丢失。

    1.找一个位置,创建文件夹

    mkdir data //存储备份的sql文件

    2.创建一个shell文件

    vim solve_back.sh

    ?文件内容为:

    #!/bin/bash 
    echo data_dump_time: `date '+%Y-%m-%d %H:%M:%S'` >> /usr/local/sh/solve_bak.log #备份日志
    cd /usr/local/mysql/bin #mysql bin目录
    mysqldump -uuser -ppassword database > /var/www/data/solve_`date '+%Y%m%d%H%M%S'`.sql #备份命令
    
    #user 数据库用户
    #password 数据库密码
    #database 数据库名称

    3.增加sh文件可操作权限

    chmod u+x solve_bak.sh

    4.运行备份shell文件

    /usr/local/sh/solve_bak.sh

    ?效果:

    5.编辑linux定时任务

    crontab -e
    
    
    */10 * * * * /usr/local/sh/solve_bak.sh #每10分钟执行一次

    等一段时间以后去查看

    发现一个问题 直接执行shell文件,sql文件是有内容的,但是使用crontab 文件内容是空的

    原因:由于mysqldump存在于全局环境变量mysql的bin下面,故在直接运行时可以识别到mysqldump命令,而在crontab里面无法识别到mysqldump命令。(ps:crontab运行失败问题基本都是环境变量引起的)

    解决方法:在备份脚本里面的mysqldump命令前加上绝对路径

    #!/bin/bash 
    echo data_dump_time: `date '+%Y-%m-%d %H:%M:%S'` >> /usr/local/sh/solve_bak.log #备份日志
    /usr/local/mysql/bin/mysqldump -uuser -ppassword database > /var/www/data/solve_`date '+%Y%m%d%H%M%S'`.sql #备份命令
    
    #user 数据库用户
    #password 数据库密码
    #database 数据库名称

    备份没有问题!

    还原:

    1.创建一个数据库,字符集与原来数据库保持一致

    2.在linux 中运行如下命令

    mysql -uuser -ppassword test_solve < /var/www/data/solve_20200611135101.sql

    导入成功!

    备份中的报错:

    mysqldump -u root -p web(数据库名) > web.sql(导出文件名)

    结果报错:

    mysqldump: unknown variable 'max_allowed_packet = 16M'

    解决方法:

    /etc/my.cnf进行修改

    [mysqldump]
    quick
    set-variable =max_allowed_packet = 16M (该行用#注释掉)

    重启mysql,问题解决!

    cs
    下一篇:没有了