备份数据
由于MySQL数据库基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据。但是,由于这些文件总是处于打开和使用的状态,普通的文件副本备份不一定总是有效。
下面列出这个问题的可能解决方案:
- 使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件。在进行常规备份前这个实用程序应该正常运行,以便能正确地备份转储文件。
# 将表备份到物理机,这样的备份是没有建库的语句的
mysqldump -h 域名 -P 端口 -u用户 -p密码 库名 表名 > /路径/表名.{$date}.bak
# 还原使用mysqldump命令备份的数据库的语法如下:
mysql -u root -p [dbname] < backup.sq
# 通过这种方式还原时,必须保证两个MySQL数据库的版本号是相同的
# MyISAM类型的表有效,对于InnoDB类型的表不可用,InnoDB表的表空间不能直接复制
- 可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(并非所有数据库引擎都支持这个实用程序)。mysqlhotcopy支持不停止MySQL服务器备份。而且,mysqlhotcopy的备份方式比mysqldump快。
# mysqlhotcopy并非mysql自带,需要安装Perl的数据库接口包
# Linux下的操作命令如下:
[root@localhost ~]# mysqlhotcopy [option] dbname1 dbname2 backupDir/
常用选项:
–help:查看mysqlhotcopy帮助;
–allowold:如果备份目录下存在相同的备份文件,将旧的备份文件加上_old;
–keepold:如果备份目录下存在相同的备份文件,不删除旧的备份文件,而是将旧的文件更名;
–flushlog:本次辈分之后,将对数据库的更新记录到日志中; --noindices:只备份数据文件,不备份索引文件;
–user=用户名:用来指定用户名,可以用-u代替;
–password=密码:用来指定密码,可以用-p代替。使用-p时,密码与-p之间没有空格;
–port=端口号:用来指定访问端口,可以用-P代替; --socket=socket文件:用来指定socket文件,可以用-S代替。
- 可以使用MySQL的BACKUP TABLE或SELECT INTO OUTFILE转储所有数据到某个外部文件。这两条语句都接受将要创建的系统文件名,此系统文件必须不存在,否则会出错。数据可以用RESTORE TABLE来复原。参考:SELECT … INTO OUTFILE与LOAD DATA语句
刷新未写数据:为了保证所有数据被写到磁盘(包括索引数据),可能需要在进行备份前使用FLUSH TABLES语句。
数据库维护
MySQL提供了一系列的语句,可以用来保证数据库正确和正常运行。
- ANALYZE TABLE,用来检查表键是都正确。
ANALYZE TABLE orders;
- CHECK TABLE用来针对许多问题对表进行检查。在MyISAM表上还对索引进行检查。CHECK TABLE支持一系列的用于MyISAM表的方式。CHANGED检查自最后一次检查以来改动过的表。EXTENDED执行最彻底的检查,FAST只检查未正常关闭的表,MEDIUM检查所有被删除的链接并进行键检验,QUICK只进行快速扫描。
CHECK TABLE orders;
# 语法 CHECK TABLE tbl_name [, tbl_name] [option]
- 如果MyISAM表访问产生不正确和不一致的结果,可能需要用REPAIR TABLE来修复相应的表。这条语句不应该经常使用,如果需要经常使用,可能会有更大的问题要解决。
- 如果从一个表中删除大量数据,应该使用OPTIMIZE TABLE来收回所用的空间,从而优化表的性能。
诊断启动问题
服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现。
在排除系统启动问题时,首先应该尽量用手动启动服务器。MySQL服务器自身通过在命令行上执行mysqld启动。
几个重要的mysqld命令行选项:
–help:显示帮助,一个选项列表;
–safe-mode:装载减去某些最佳配置的服务器;
–verbose:显示全文本消息(为获得更详细的帮助消息与–help联合使用);
–version:显示版本信息然后退出。
查看日志文件
MySQL维护管理员依赖的一系列日志文件。主要的日志文件有以下几种。
- 错误日志。它包含启动和关闭问题以及任意关键错误的细节。此日志通常名为hostname.err,位于data目录中。此日志名可用–log-error命令行选项更改。
- 查询日志。它记录所有MySQL活动,在诊断问题时非常有用。此日志文件可能会很快地变得非常大,因此不应该长期使用它。此日志文件通常名为hostname.log,位于data目录中。此名字可用–log命令行选项更改。
- 二进制日志。它记录更新过数据(或者可能更新过数据)的所有语句。此日志通常名为hostname-bin,位于data目录中。此名字可以用–log-bin命令行选项更改。注意,这个日志文件是MySQL 5中添加的,以前的版本中使用的是更新日志。
- 缓慢查询日志。此日志记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用。此日志通常名为hostname-slow.log,位于data目录中。此名字可以用–log-slow-queries命令行选项更改。
在使用日志时,可用FLUSH LOGS语句来刷新和重新开始所有日志文件。