mysql定时备份、二进制日志

备份命令:

  备份全部数据库:mysqldump -uroot -proot --all-databases > /backups/data.sql

  备份指定数据库:mysqldump -uroot -proot --databases test01 > e:/test01.sql

  备份远程指定数据库:mysqldump -h192.168.3.47 -uroot -proot --databases test > e:/test.sql

修改配置文件my.conf:为了在使用mysqldump命令时能省略输入密码执行 mysqldump --all-databases > /backups/data.sql

  

定时备份,创建任务 shell:

#!/bin/bash
# 文件名
dd=`date +"%Y%m%d%H%M%S"` # 保存备份个数 number=15 # 备份保存路径 backup_dir=/usr/local/mysql/mysql57/backups # 将要备份的数据库 database_name=test # 如果文件夹不存在则创建 if [ ! -d $backup_dir ]; then mkdir -p $backup_dir; fi # 执行备份命令 mysqldump --defaults-extra-file=/etc/my.cnf $database_name > $backup_dir/$database_name-$dd.sql # 写创建备份日志 echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt # 找出需要删除的备份 delfile=`find $backup_dir -name "*.sql" | head -1` # 判断现在的备份数量是否大于$number count=`find $backup_dir -name "*.sql" | wc -l` if [ $count -gt $number ] then # 删除最早生成的备份,只保留number数量的备份 rm $delfile # 写删除文件日志 echo "delete $delfile" >> $backup_dir/log.txt fi

  添加权限:chmod +x backups.sh

  创建定时任务:

    crontab -e 输入命令后回车,进入vim 编辑模式,增加如下配置

      0 1 * * * /usr/local/mysql/mysql57/backups.sh  每天1点执行

    crontab -l 显示crontab文件(显示已设置的定时任务)

    crontab -r 删除crontab文件(删除定时任务)

    crontab -ir 删除crontab文件提醒用户(删除定时任务)

    service crond start //启动服务
    service crond stop //关闭服务
    service crond restart //重启服务
    service crond reload //重新载入配置
    service crond status //查看服务状态

mysql二进制日志:

  二进制日志(Binary Log)也可叫作变更日志(Update Log),是 MySQL 中非常重要的日志。主要用于记录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,不包含数据记录查询操作。

  如果 MySQL 数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器。

  结合定时备份,可以很大程度应对数据库数据丢失。

  查看二进制功能是否开启,默认是关闭的:SHOW VARIABLES LIKE 'log_bin';

  启动和设置二进制日志:

    在配置文件中添加 log-bin 选项来开启二进制日志

      [mysqld]
      log-bin=/dir/[filename]

      其中,dir 参数指定二进制文件的存储路径;filename 参数指定二进制文件的文件名,其形式为 filename.number,number 的形式为 000001、000002 等。

      每次重启 MySQL 服务后,都会生成一个新的二进制日志文件,这些日志文件的文件名中 filename 部分不会改变,number 会不断递增。如果启动失败,检查一下 /dir 是否有权限(chown -R mysql:mysql /usr/local/mysql/mysql57/bin_log)

      除了 filename.number 文件,MySQL 还会生成一个名为 filename.index 的文件,这个文件存储着所有二进制日志文件的列表,可以用记事本打开该文件。

    查看二进制日志文件内容

      mysqlbinlog filename.number

    二进制日志还原数据库的命令

      mysqlbinlog filename.number | mysql -uroot -proot

      使用 mysqlbinlog 命令进行还原操作时,必须是编号(number)小的先还原。例如,mylog.000001 必须在 mylog.000002 之前还原。

    my.ini 中的 [mysqld] 组下面有几个设置参数是关于二进制日志的

      expire_logs_days=10    定义 MySQL 清除过期日志的时间
      max_binlog_size=1​00M     定义单个文件的大小限制

  实际工作中,二进制日志文件与数据库的数据文件不放在同一块硬盘上,这样即使数据文件所在的硬盘被破坏,也可以使用另一块硬盘上的二进制日志来恢复数据库文件。两块硬盘同时坏了的可能性要小得多,这样可以保证数据库中数据的安全。

posted @ 2021-10-05 17:34  糖不甜,盐不咸  阅读(196)  评论(0编辑  收藏  举报