精华内容
下载资源
问答
  • mysql 恢复数据

    2018-01-23 16:53:00
    前提:保存了需要恢复数据库的文件 .frm 和 .ibd 文件 条件:InnoDB 类型的 恢复表结构1.新建一个数据库--新建一个表,表名和列数和需要恢复数据库相同2.停止mysql服务器 service mysql stop ,3.在/usr/local/...

    前提:保存了需要恢复数据库的文件 .frm 和 .ibd 文件

    条件:InnoDB 类型的

    恢复表结构
    1.新建一个数据库--新建一个表,表名和列数和需要恢复数据库相同
    2.停止mysql服务器 service mysql stop ,
    3.在/usr/local/mysql/my.cnf 里面添加innodb_force_recovery = 6
    4.将需要恢复的表.frm格式文件 覆盖/usr/local/mysql/data/数据库 下的.frm格式文件
    5.启动mysql服务器 service mysql start
    6.停掉数据库服务 service mysql stop ,将my.cnf 里面的 innodb_force_recovery = 6 注释掉
    7.启动mysql服务器 service mysql start

     

    恢复数据
    1.先恢复表结构
    2.执行 alter table `user` discard tablespace ; 执行完之后,数据库目录下的user.ibd文件就没了
    3.把你备份的ibd放到消失的user.ibd文件那里
    4.给这个文件加权限 chown -R mysql:mysql data 所有者为mysql
    5.执行 alter table `user` import tablespace; 执行完,表数据就可读了,这时候会丢失一些诸如表行记录数等存在系统表里的信息

    备注:如果遇到外键约束,在语句前加上SET FOREIGN_KEY_CHECKS = 0; 完成后记得改为1

    转载于:https://www.cnblogs.com/buddyquan/p/8336677.html

    展开全文
  • mysql恢复数据时中文乱码,解决办法。 用source命令导入mysql数据库怎么设置中文编码 1.导出数据时指定编码在导出mysql sql执行文件的时候,指定一下编码格式: mysqldump -uroot -p --default-character-set=...

    mysql恢复数据时中文乱码,解决办法。

    用source命令导入mysql数据库怎么设置中文编码

    1.导出数据时指定编码
    在导出mysql sql执行文件的时候,指定一下编码格式:

    mysqldump -uroot -p --default-character-set=utf8 mo(dbname) > E://xxxx.sql

    2.导入数据时指定编码

    mysql -u root -p --default-character-set=utf8 
    use dbname 
    source /root/newsdata.sql

     

    转载于:https://www.cnblogs.com/liuxm2017/p/11126978.html

    展开全文
  • mysql下常用的数据恢复方法,基于binlog方式。适合初学者参考。最好的恢复来源还是备份,备份也没有binlog也没有,那就别想了。
  • mysql恢复数据工具-mysqlbinlog工具使用 要使用此功能 首先必须确保mysql配置文件中的 [mysqld] log-bin=log_name 开启(其中log_name自己定义) 开启的作用就是开启mysql的二进制日志,然后才可以...
    mysql恢复数据工具-mysqlbinlog工具使用 

    要使用此功能

    首先必须确保mysql配置文件中的

    [mysqld] log-bin=log_name 开启(其中log_name自己定义)

    开启的作用就是开启mysql的二进制日志,然后才可以使用mysqlbinlog工具恢复数据

    开启之后通过在mysql中运行:

    SHOW BINLOG EVENTS

    来确认二进制日志的开启

    mysqlbinlog有两种方式来恢复数据:

    1.通过指定时间:

    D:Mysqldatalog> mysqlbinlog --start-date="2009-11-27 14:01:00" --stop-date="2009-11-27 14:59:59" log_name.000001 > D:01.txt

    2.通过指定位置:

    参数说明:

    •–start-position=N 从二进制日志中第1个位置等于N参量时的事件开始读。

    •–stop-position=N 从二进制日志中第1个位置等于和大于N参量时的事件起停止读。

    D:Mysqldatalog> mysqlbinlog --start-position=123 --end-position=456 log_name.000001 > D:01.txt

    关于position的说明:position可以通过执行SHOW BINLOG EVENTS命令来查看 然后进入mysql中执行source 命令 mysql>source D:01.txt 恢复数据完成。

    最后说明:mysqlbinlog工具虽然很强大,但是为保数据不丢失最好还是跟备份数据同步使用。这样恢复数据就可以仅从最后一次备份开始到事故发生时间。


    展开全文
  • 1.人工误删除InnoDB ibdata数据文件恢复 使用rm -f ib* 删除数据文件和重做日志文件,此时mysql数据库还是可以继续工作,数据可以写入,此时千万不能把mysqld进程杀死,否则无法挽救. 先找到mysqld的进程pid ...

    1.人工误删除InnoDB ibdata数据文件恢复

    使用rm -f ib* 删除数据文件和重做日志文件,此时mysql数据库还是可以继续工作,数据可以写入,此时千万不能把mysqld进程杀死,否则无法挽救.

    1. 先找到mysqld的进程pid netstat -ntlp | grep mysqld
    2. 查看结果 ll /proc/进程id/fd | egrep 'ib_|ibdata' ,查看10,11,4,9为要恢复的文件
    3. 关闭业务, flush tables with read lock; 让数据库只读,以便完成恢复工作
      1. 检验只读是否成功 ,让脏页尽快刷入到磁盘中 set global innodb_max_dirty_pages_pct=0;
      2. 查看binlog日志写入情况确保file和position的值没有在变化 show master status;
      3. 在查看innodb状态信息,确保脏页已经刷入磁盘 show engine innodb status\G
      4. 查看状态确保一些值是正确的
        1. 查看transactions 确保后台purge进程把undo log全部清理掉,事务id 要一致
        2. 查看insert buffer and adaptive hash index 合并插入缓存等于1
        3. 查看log 确保log sequence…,log flushed…,log checkpoint… 这三个值不在变化
        4. 查看buffer pool and memory 确保脏页数据为0
        5. 查看row operations 确保插入更新删除为0
    4. 恢复数据,把之前看到的几个文件cp到原来的目录下
    5. 修改用户属性 chown mysql:mysql ib*
    6. 重启mysql测试 (千万不要在生产环境测试)

    2.update忘加where条件误操作恢复

    1. 全量备份+增量binlog备份(弊端数据量大时,恢复麻烦)

    2. 模拟oracle闪回功能

      1. 将binlog日志设置为binlog_format=ROW,如果是statement则无效

      2. 执行语句但忘记加where条件导致数据都被修改

      3. 恢复,创建一个新的用户分配权限为只读,将业务连接账号设置为这个

        1. `grant all privleges onyouDB.* TO 'admin_read_only'@'%'identified by '密码';
        2. `flush privileges;`
        3. set global read_only=1;
        
      4. 通过binlog找到那条执行的update语句

        /usr/local/mysql-master/bin/mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-master-bin.000023 | grep -B 15 '修改后的值' | more
        
      5. 把此binlog语句导出

        /usr/local/mysql-master/bin/mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-master-bin.000024 | sed -n '/# at 194/,/COMMIT/p' >/usr/local/1.txt
        
        查看文件 `more /opt/1.txt`
        
      6. 把binlog转换成sql语句

        sed '/WHERE/{:a;N;/SET/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' test.txt | sed -r '/WHERE/{:a;N;/@4/!ba;s/###   @2.*//g}' | sed 's/### //g;s/\/\*.*/,/g' | sed '/WHERE/{:a;N;/@1/!ba;s/,/;/g};s/#.*//g;s/COMMIT,//g' | sed '/^$/d' > ./recover.sql
        
        sed '/WHERE/{:a;N;/SET/!ba;s/\([^\n]*\)\n\(.*\)\n\(.*\)/\3\n\2\n\1/}' 把where和set换位置
        sed -r '/WHERE/{:a;N;/@4/!ba;s/###   @2.*//g}'###   @2.* 后边的替换为空
        sed 's/### //g;s/\/\*.*/,/g'  把 /* */ 换成 , 
        sed '/WHERE/{:a;N;/@1/!ba;s/,/;/g};s/#.*//g;s/COMMIT,//g'#那行去掉,把commit去掉
        sed '/^$/d'     去除空行
        sed -i 's/@1/id/g;s/@2/name/g;s/@3/class/g;s/@4/score/g' recover.sql  替换为字段
        sed -i -r 's/(score=.*),/\1/g' recover.sql     把score=后边的逗号去掉
        
      7. 把@1,@2。。。转换为相应的表字段

        sed -i 's/@1/id/g;s/@2/name/g;s/@3/class/g;s/@4/score/g' recover.sql
        sed -i -r 's/(score=.*),/\1/g' recover.sql
        cat recover.sql
        
      8. 恢复

        source /opt/recover.sql
        

    3.delete忘加where条件误操作恢复(模拟oracle闪回功能)

    1. 分析binlog将误操作delete语句保存到文本中

      /usr/local/mysql-master/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-master-bin.000024 | grep -B 15 'DELETE' |more
      
      /usr/local/mysql-master/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-master-bin.000024 | sed -n '/### DELETE FROM `school`.`student`/,/COMMIT/p'> /usr/local/delete.txt
      
    2. 转换为标准的sql语句

      cat delete.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' | sed -r 's/(@4.*),/\1;/g' | sed 's/@[1-9]=//g' > insert.sql
      
    3. 导入

      source /opt/insert.sql
      

    参考:MySQL管理之道+性能调优、高可用与监控

    展开全文
  • mysql恢复数据功能一些笔记

    千次阅读 2013-08-06 09:55:02
    说不定某个程序员来一个del,某个备份时间定后面的数据想找也找不回来了,查了一下资料利用mysql日志可以很好解决前面问题,优点:是想恢复到某个时间点,或某个操作sql语句,缺点:就产生庞大的日志文件.下面是我在...
  • 问题是这样的,使用mysqldump备份线上数据库之后,然后通过mysql 命令行恢复到线下数据库,发现视图都成了表。 为什么会这样呢?这就得聊聊mysql备份恢复的机制了其实查看mysqldump备份产生的sql语句,会发现视图...
  • 近一两周内一直在忙一个恢复MySQL数据库的工作,但也因为一直被这个问题困扰,导致进度缓慢。简单来说,如果我们希望对MySQL restore比较大的数据备份,可能会发生这种情况。对于我来讲,需要恢复的库中有一个表解压...
  • mysql 恢复数据方法(frm+ibd)

    千次阅读 2015-05-21 13:31:13
    另外准备一份mysql环境,版本等要一样。 随便创建一个数据库 1.在里面建一个表 CREATE TABLE `xxx` ( `id` int(32) NOT NULL AUTO_INCREMENT , PRIMARY KEY (`id`), ) ENGINE=InnoDB AUTO_INCREMENT=9021 ...
  • mysql恢复数据后总是自动停止

    千次阅读 2010-12-06 14:12:00
    过了好久又遇到了这个问题,之前怎么做的都忘记了,折腾了半天,记下来,供日后参考。... 给mysql一个新的感觉的环境,原有的数据通过copy的方式恢复成功,即data文件夹和ibdata1. 此时用sq
  • 出现这个错误,是由于插入的数据记录大于了my.ini里面max_allowed_packet设置的值(max_allowed_packet默认值是1M),只需要将max_allowed_packet的值设置大一点,重启mysql就可以了。
  • *将frm文件导入MySql数据库 记得在删除mysql时将安装目录下的data文件夹备份 只要在mysql的安装文件中找到data文件夹,将备份的data文件全部复制进去就可以了。 即:> 全部导入! 把.frm文件导进去。注意在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,845
精华内容 5,138
关键字:

mysql恢复数据

mysql 订阅