本文目录一览

1,如何修复损坏的MySQL数据表

有两种方法,一种方法使用使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。另一种方法是MySQL的check table和repair table 的sql语句,使用起来比较简便。 一、myisamchk, isamchk 其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用: myisamchk tablename.MYI 进行检测,如果需要修复的话,可以使用: myisamchk -of tablename.MYI 关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL(和PHP搭配之最佳组合)服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL(和PHP搭配之最佳组合)服务器Shutdown掉。 另外可以把下面的命令放在你的rc.local里面启动MySQL(和PHP搭配之最佳组合)服务器前: 1.[ -x /tmp/MySQL(和PHP搭配之最佳组合).sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI 其中的/tmp/MySQL(和PHP搭配之最佳组合).sock是MySQL(和PHP搭配之最佳组合)监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/MySQL(和PHP搭配之最佳组合)/MySQL(和PHP搭配之最佳组合).sock,对于使用源码安装则是/tmp/MySQL(和PHP搭配之最佳组合).sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL(和PHP搭配之最佳组合)数据库存放的位置。 需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动! 检测修复所有数据库(表) MySQL(和PHP搭配之最佳组合)check -A -o -r -p 二、check table 和 repair table 登陆MySQL终端: MySQL -uxxxxx -p dbname 1.> check table tabTest; 如果出现的结果说Status是OK,则不用修复,如果有Error,可以用: 1.> repair table tabTest; 进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

如何修复损坏的MySQL数据表

2,mysql删除的表格怎么恢复数据

MySQL开启binlog后,写入操作都会记录到二进制日志里,可以使用mysqlbinlog查看/导出/恢复数据. 假设你之前进行了 mysqldump全量备份,和binlog增量备份(在mysqldump全量备份时使用参数--flush-logs清除全量备份前的binlog). 先恢复之前用mysqldump进行的全量备份,然后用 mysqlbinlog进行时间点还原:
有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用mysql提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1. check table 和 repair table登陆mysql 终端:mysql -uxxxxx -p dbnamecheck table tabtest;如果出现的结果说status是ok,则不用修复,如果有error,可以用:repair table tabtest;进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpmyadmin里面也可以使用check/repair的功能。2. myisamchk, isamchk其中myisamchk适用于myisam类型的数据表,而isamchk适用于isam类型的数据表。这两条命令的主要参数相同,一般新的系统都使用myisam作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:myisamchk tablename.myi进行检测,如果需要修复的话,可以使用:myisamchk -of tablename.myi关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保mysql服务器没有访问这个数据表,保险的情况下是最好在进行检测时把mysql服务器shutdown掉。-----------------------------另外可以把下面的命令放在你的rc.local里面启动mysql服务器前:[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /data_dir/*/*.myi其中的/tmp/mysql.sock是mysql监听的sock文件位置,对于使用rpm安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,data_dir是你的mysql数据库存放的位置。需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时mysql服务器必须没有启动!检测修复所有数据库(表)

mysql删除的表格怎么恢复数据

3,怎样修复mysql表

有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1. check table 和 repair table登陆mysql 终端:mysql -uxxxxx -p dbnamecheck table tabTest;如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:repair table tabTest;进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。2. myisamchk, isamchk其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:myisamchk tablename.MYI进行检测,如果需要修复的话,可以使用:myisamchk -of tablename.MYI关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。-----------------------------另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)
也许很多人遇到过类似Cant open file: [Table]mytable.MYI 这样的错误信息,却不知道怎么解决他,下面我们做个介绍,多数情况下,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少。大多数形式的数据库破坏的的修复相当简单。和前面的校验一样,修复的方式也有三种。下面讲的方法只对MyISAM格式的表有效。其他类型的损坏需要从备份中恢复。1,REPAIR TABLE SQL statement(mysql服务必须处于运行状态)。2,命令mysqlcheck(mysql服务可以处于运行状态)。3,命令myisamchk(必须停掉mysql服务,或者所操作的表处于不活动状态)。在修复表的时候,最好先作一下备份。所以你需要两倍于原始表大小的硬盘空间。请确保在进行修复前你的硬盘空间还没有用完。1>用”repair table”方式修复语法:repair table 表名 [选项]选项如下:QUICK 用在数据表还没被修改的情况下,速度最快EXTENDED 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用USE_FRM 用在.MYI文件丢失或者头部受到破坏的情况下。利用.frm的定义来重建索引多数情况下,简单得用”repair table tablename”不加选项就可以搞定问题。但是当.MYI文件丢失或者头部受到破坏时,这样的方式不管用,例如:mysql> REPAIR TABLE mytable;+————————-+——–+———-+———————————————+| Table | Op | Msg_type | Msg_text |+————————-+——–+———-+———————————————+| sports_results.mytable | repair | error | Cant find file: mytable.MYI (errno: 2) |+————————-+——–+———-+———————————————+修复失败的原因时索引文件丢失或者其头部遭到了破坏,为了利用相关定义文件来修复,需要用USE_FRM选项。例如:
有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1. check table 和 repair table登陆mysql 终端:mysql -uxxxxx -p dbnamecheck table tabTest;如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:repair table tabTest;进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。2. myisamchk, isamchk其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:myisamchk tablename.MYI进行检测,如果需要修复的话,可以使用:myisamchk -of tablename.MYI关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

怎样修复mysql表

4,MySQL数据库中怎么备份和恢复

导出Sql备份!到时候再运行一遍就行了!
建议你安装phpmyadmin 方便管理你的MYSQL数据库 备份或还原都可在上面操作完成
MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy1、mysqldump 1.1 备份 mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。现在来讲一下 mysqldump 的一些主要参数:--compatible=name 它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。--complete-insert,-c 导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。--default-character-set=charset 指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。--disable-keys 告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。--extended-insert = true|false 默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。--hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。--lock-all-tables,-x 在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。--lock-tables 它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。--no-create-info,-t 只导出数据,而不添加 CREATE TABLE 语句。--no-data,-d 不导出任何数据,只导出数据库表结构。--opt 这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。--quick,-q 该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。--routines,-R 导出存储过程以及自定义函数。--single-transaction 该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。--triggers 同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。其他参数详情请参考手册,我通常使用以下 SQL 来备份 MyISAM 表:/usr/local/mysql/bin/mysqldump -uyejr -pyejr \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob -x db_name > db_name.sql 使用以下 SQL 来备份 Innodb 表:/usr/local/mysql/bin/mysqldump -uyejr -pyejr \--default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob --single-transaction db_name > db_name.sql 另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:/usr/local/mysql/bin/mysqldump -uyejr -pyejr \--default-character-set=utf8 --opt --master-data=1 \--single-transaction --flush-logs db_name > db_name.sql 它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。1.2 还原 用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。直接用 mysql 客户端 例如:/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql 用 SOURCE 语法 其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:SOURCE /tmp/db_name.sql; 这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。2、 mysqlhotcopy 2.1 备份 mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \db_name /tmp (把数据库目录 db_name 拷贝到 /tmp 下)root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \db_name_1 ... db_name_n /tmproot#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \db_name./regex/ /tmp 更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhotcopy 的帮助:perldoc /usr/local/mysql/bin/mysqlhotcopy 注意,想要使用 mysqlhotcopy,必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。2.2 还原 mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:root#cp -rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
你安装下phpmyadmin,下载直接解压就可以,有图形界面的,可视化操作

文章TAG:mysql恢复数据的语句  如何修复损坏的MySQL数据表  
下一篇