MySQL数据库的维护、备份和恢复
1.预防性维护
1.1 激活mysql服务器的自动恢复能力
事务型存储引擎的自动恢复在MySQL服务器每次启动时都会自动发生。
MyISAM自动恢复是可选的需要明确启用:
–myisam-recover=level 选项来启动MySQL服务器。level的值是一个以逗号分隔的,由以下几个值中的一个或多个构成的列表:
BACKUP:如果自动恢复工作需要修改某个数据表,先为它创建一个备份
FORCE:强行恢复,哪怕会因此而丢失一个以上分数据行
QUICK:快速恢复
DEFAULT:不进行任何其他reshuffle处理的普通恢复,这与把该选项设置为空的效果完全一样。
比如说,想在发现问题时先创建一个备份再强行进行恢复,就要使用–myisam-recover=BACKUP,FORCE选项来启动MySQL服务器。
1.2 定期对数据表进行检查
数据表的日常检查能帮助你及时发现和纠正那些小问题而不是让他们变得糟糕
45 3 * * 0 /usr/local/mysql/bin/mysqlcheck –all-databases –check-only-changed –silent
mysqlcheck程序可以在mysql服务器运行时对myisam和innodb数据表进行检查,使用mysql用户的crontab文件里增加这个选项。
说明: 当一个数据表正在被检查的时候,它将不能被更新,因此,自动化的维护策略不一定适用于那些需要频繁更新的大数据表,因为在检查期间阻断对他们的更新可能产生更严重的后果
2.在线维护数据库(只适用于MyISAM)
LOCK TABLE
FLUSH TABLE
UNLOCK TABLE
2.1 只读方式锁定
如果只是检查或者复制某些文件 以只读方式锁定他们就足够了:
这里描述的利用mysql服务器的内部锁定机制去锁定给数据表的办法仅仅适用于那些把每个数据表分别表示为一组相关文件的存储引擎(比如MyISAM),不适用于把多个数据表的信息保存在同一个给定文件里的引擎(如InnoDB)。
InnoDB在默认情况下InnoDB存储引擎会把所有的InnoDB数据表保存在构成其共享表空间的文件里。即使把InnoDB存储引擎配置成给每个数据表单独创建一个表空间的样子,它也会把每个数据表的一些信息保存在他的数据字典里,而数据字典总是保存在共享空间里的。
(1)在窗口A里执行mysql程序 然后用以下语句申请一个读操作锁并把数据表在内存里的信息写入磁盘
mysql>lock table tbl_name read;
mysql>flush table tbl_name;
(2)把mysql程序闲置在那儿,切换到窗口b操作数据表文件,比如去检查一个MyISAM数据表
myisamchk tbl_name
(3)完成对数据表的处理之后 切换到窗口A里的mysql会话解除对数据表的锁定
mysql>unlock table
2.2 读写方式锁定
如果需要修改某些文件,比如:需要对数据表进行修复或者需要用完好的文件替换被损坏的文件时,应该以读写方式锁定他们。
在窗口a里执行mysql程序,然后用以下语句申请一个写操作锁并刷新数据表
mysql>lock table tbl_name write;
mysql>flush table tbl_name;