MySQL数据库备份和还原

MySQL数据库备份和还原

  以下方法前景必须是一台用yum源安装的mysql数据库没操作过的崭新的服务器

  *查看是否启用二进制日志:show master logs;/show binary logs;

    

  *创建一个日志文件专门存放二进制日志:mkdir /data/logbin

  *修改配置文件:vim /etc/my.cnf

    

  *设置权限所有者和所属组:chown mysql.mysql /data/logbin/

  *重新启动mysql服务:systemctl restart mariadb

  *查看文件夹是否生成二进制文件:ll /data/logbin(上面是二进制文件,下面是索引)

    

  *再次查看二进制文件是否启动:show master logs;(默认大小245)|show master status;(position默认大小)

    

    

  *刷新日志(也是创建日志):flush logs;

    

  *清除指定的二进制日志:purge binary logs to '删除文件之前的位置';(删除之前的文件不包括本身)

    

  *删除所有的二进制文件从新计数:reset master;

    

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

冷备份 

  *停止服务:systemctl stop mariadb;

  *查看目录:ls /var/lib/mysql/(mysql.sock文件不存在了)

  *压缩数据:tar Jcvf all.bak.tar.xz /var/lib/mysql(打包数据库)

       tar Jcvf logbin.tar.xz(打包二进制文件)

       /etc/my.cnf(直接拷贝)

  *创建一个目录存放压缩数据:mkdir backup

               mv all.bak.tar.xz logbin.tar.xz /backup/

               cp /etc/my.cnf /backup/

  *拷贝到另一台机器上:scp -r /backup/ 192.168.198.17:/data/(本机地址为192.168.198.7)

  *打开ip为192.168.198.17的服务器(该机器未安装过mysql),查看传送过来的文件:ls /data

  *yum安装数据库:yum install mariadb-server -y

  *查看数据库:ls /var/lib/mysql(该目录是空的)

  *覆盖配置文件:cp /data/backup/my.cnf  /etc/my.cnf -b(-b是备份)

  *查看备份的my.cnf文件:ll /etc/my.cnf(my.cnf~备份文件)

  *创建二进制文件,改变所有者和所属组:mkdri /data/logbin/  chown mysql.mysql /data/logbin/

  *解压二进制文件压缩包:tar -xvf /data/backup/logbin.tar.xz -C /data/logbin

  *进入目录查看:cd /data/logbin(这是这个目录不对)mv data/logbin/* .(把数据移出)rm -rf data(删除data目录)

  *解压mysql压缩包然后移动到/var/lib/mysql中:cd /data/backup/(进入) tar xvf all.bak.tar.xz(解压在当前目录) cd var/lib/mysql(进入) mv * /var/lib/mysql(移动全部数据到该目录)

  *启动数据库:systemctl start mariadb;(启动之后进入mysql查看即可)

----------------------------------------------------------------------------------------------------------------------------------------------------------

mysqldump

 一、mysqldump [options] database [tables](备份一个数据库此法问题较多不推荐使用) 

  *创建一个备份目录:mkdir /data/backup/

  *复制整个数据库成sql语句:mysqldump hellodb > /data/backup/hellodb.sql

  *删除该数据库:mysql -e 'drop database hellodb';

  *还原数据库得先创建该数据库:create database hello;(mysqldump恢复数据时不具有自动创建数据库的功能需要手工创建,创建的新数据库名字可以改变)

  *还原数据:mysql hello < /data/backup/hellodb.sql

  *进入数据库查看是否还原即可

  二、mysqldump [options] -B DB1[DB2 DB3...](备份部分数据库)

  *创建一个备份目录:mkdir /data/backup

  *备份数据库:mysqldump -B hello[后面可以跟多个数据库] > /data/backup/hello.sql

  *删除数据库:mysql -e 'drop database hello';

  *还原数据:mysql < /data/backup/hello.sql

  *进入数据库查看即可

 三、mysqldump [options] -A [options](备份全部数据库)

  *创建一个备份目录:mkdir /data/backup

  *备份数据库:mysqldump -A > /data/backup/all.sql

  *删除数据库

  *还原数据:mysql < /data/backup/all.sql

  *进入数据库查看即可

  

  

  四、mysqldump --master-data[=#](二进制日志还原)

  *创建备份存放目录:mkdir /data/backup/

   *备份为注释的CHANGE MASTER TO语句:mysqldump -A --master-data=2 > /data/backup/all.sql

   *查看现在的二进制文件:mysql -e 'show master logs';

   *随便写一条sql语句即可

   *再次查看二进制文件会发现文件变大:mysql -e 'show master logs';

   *开始删库:rm -rf /var/lib/mysql/*(啥也没了)

   *重启数据库服务:systemctl restart mariadb(会重新生成mysql文件)

   *恢复数据库时禁止用户访问,在配置文件修改:vim /etc/my.cnf 添加:skip_networking 不允许网络连接或者skip_grant_tables跳过授权表只是服务器选项不是变量

   *临时关闭二进制文件不让他生效:show variables like 'sql_log_bin'默认是NO,set sql_log_bin=OFF即可

   *再次查看二进制文件:show master logs;发现他多生成出几个文件

   *我要还原图中数据即可(只是我自己),可以查看备份的文件得出依据从哪里开始还原

    

   *进入二进制文件目录备份丢失的数据,如下图所示

    

  *导入还原数据:进入mysql输入source /data/backup/all.sql(先还原全部备份)source /data/backup/inc.sql(还原丢失数据)

    *进入数据库查看即可

  *恢复二进制数据记录:set sql_log_bin=on;

  五、恢复误删的表

  *创建数据备份的目录:mkdri /data/backup/

  *备份二进制数据:mysqldump -A --master-data=2 > /data/backup/all_`date +%F`.sql

  *随便写一条sql语句

  *删表:drop table students;

  *刷新日志,找出丢失的日志文件

    

  *刷新丢失的二进制文件:mysqlbinlog  --start-position=245 /data/logbin/mysql-bin.000005 > /data/backup/inc.sql

  *打开配置文件vim /data/backup/inc.sql,找到删除命令注销

   

  *删除数据库:rm -rf /var/bin/mysql/*

  *重启服务器:systemctl restart mariadb

  *进入数据库停止二进制服务:set sql_log_bin=off;

  *导入还原数据:进入mysql输入source /data/backup/all_2019_7_11.sql(先还原全部备份)source /data/backup/inc.sql(还原丢失数据)

  *查看数据:执行一条查询语句(即可成功)

  

   

   

    

  

  

    

  

  

  

    

    

  

    

    

原文地址:https://www.cnblogs.com/dengkui/p/11168995.html