MySQL常用工具
“default-character-set”这个选项作为服务器字符集选项,可以在my.cnf的[mysqld]组中配置,也可以在my.cnf的[mysql]组中配置,并且可以在mysql的命令行中手工指定客户端字符集”mysql -u user –default-character-set=charset”。
在命令行中”-e(–execute=)”选项可以直接执行MySQL脚本,而不用连接到MySQL数据库后再执行。可以按这种方式连续执行多个SQL语句,用英文分号(;)隔开,”mysql -u root -p -e ‘select * from t1;select count(*) from t2′”。
命令行中的”-E”选项类似于mysql里面执行SQL语句后加”\G”来进行格式化输出。
还有几个错误处理选项,”-f(–force)”表示强制执行SQL,”-v(–verbose)”显示更多信息,”–show-warnings”显示警告信息。
myisampack(MyISAM表压缩工具)可以使用很高的压缩率来对MyISAM存储引擎的表进行压缩,使用压缩后的表占用比压缩前小得多的磁盘空间。但是压缩后的表也将成为一个只读表,不能进行DML操作。
mysqlbinlog(日志管理工具)可以检查由服务器生成的二进制日志,其中–start-datetime/position、–stop-datetime/position可以查看指定日期间隔或者位置间隔内的所有日志。
mysqlcheck(MyISAM表维护工具)可以检查和修复MyISAM表,还可以优化和分析表。实际上,它集成了mysql工具中check、repair、analyze、optimize的功能。
mysqldump(数据导出工具)用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建表或装载表的SQL语句。mysqldump目前是MySQL中最常用和备份工具。
mysqlhotcopy(MyISAM表热备份工具)是一个Perl脚本,它使用了LOCK TABLES、FLUSH TABLES、cp或scp来快速备份数据库。它是备份数据库或单个表的最快途径,其缺点是mysqlhotcopy只用于备份MyISAM,而且它需要运行在Linux/Unix环境中。
mysqlimport(数据导入工具)是客户端数据导入工具,用来导入mysqldump加-T选项后导出的文本文件。它实际上是客户端提供了LOAD DATA INFILE语句的一个命令行接口。
mysqlshow(数据库对象查看工具)客户端对象查找工具,用来很快地查找哪些数据库、数据库中的表、表中的列或索引。其使用方法如下:mysqlshow [-u|-p] [dbname] [table] [col] –count(显示统计信息)/-k(-keys,显示指定表的所有索引)/-i(-status,显示表的一些状态信息)
perror(错误代码查看工具)是用来解释数据库中一些错误代码的详细含义的,”perror 30 60″是查看错误号30和60分别指什么错误。
MySQL日志
错误日志 :这是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。
错误日志可以用–log-error[=file_name]选项来指定mysqld保存错误日志文件的位置。如果没有给定file_name值,mysqld使用错误日志名host_name.error(host_name为主机名)并默认在参数DATADIR(数据目录)指定的目录中写入日志文件。
二进制日志 :又称binlog,记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句。语句以“事件”的形式保存,它描述了数据的更改过程。
二进制日志可以使用–log-bin[=file_name]选项启动来指定mysqld将包含所有更新数据的SQL命令写入指定的日志文件。如果没有给出file_name值,默认名为主机后面跟”-bin”。如果给出了文件名,但没有包含路径,则文件默认为被写入参数DATADIR(数据目录)指定的目录。
二进制日志是以二进制方式存储,不能直接读取,需要用mysqlbinlog工具查看。
执行”RESET MASTER”可以删除所有BINLOG日志,新日志编号从”000001″开始。执行“PURGE MASTER LOGS TO log_file-bin.000006″命令将删除000006之前编号的所有日志。执行“PURGE MASTER TO LOGS BEFORE ‘yyyy-mm-dd hh:mm:ss”将删除指定时间前的日志。设置参数–expire_logs_days(expire_logs_day=d)可以设置删除d日前的过期日志。
查询日志 :记录了客户端的所有语句,而二进制日志不包含只查询数据的语句。查询日志记录的格式是纯文本,因此可以直接进行读取。
查询日志也可以用–log[=file_name]选项启动mysqld来指定查询日志要保存的位置。和其他日志一样,如果没有给定file_name的值,日志将写入参数DATADIR(数据目录)指定的路径下,默认文件名是host_name.log。
查询日志记录了所有的数据库操作,对于访问频繁的系统,此日志对系统性能的影响较大,建议一般情况下关闭。
慢查询日志 :记录了包含所有执行时间超过参数long_query_time(单位:秒)所设置值的SQL语句的日志。获得表锁定的时间不算作执行时间。和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。
慢查询日志可以用–log-slow-queries[=file_name]选项启动mysqld来指定慢查询日志要保存的具体位置。和前面几种日志一样,如果没有给定file_name的值,日志将写入参数DATADIR(数据目录)指定的路径下,默认文件名是host_name-slow.log。
如果慢查询日志中记录内容很多,可以使用mysqldumpslow工具来对慢查询日志进行分类汇总。慢查询日志对于我们发现应用中有性能问题的SQL很有帮助,建议正常情况下,打开此日志并经常查看分析。
备份和恢复
在MySQL里面,逻辑备份的最大优点是对于各种存储引擎,都可以用同样的方法来备份,都是通过导出执行过的SQL命令来重新建立数据;而物理备份则不同,不同的存储引擎有着不同的备份方法。
备份后的完全恢复,可以将mysqldump导出的SQL命令重新导入执行,然后将备份后执行的日志进行重做,”mysqlbinlog binlog-file | mysql -u root -p”。
不完全恢复是指由于误操作导致数据丢失,此时需要恢复误操作之前的状态,并跳出误操作语句,再恢复后面的语句。这个可以利用mysqlbinlog中的–start-datetime/position、–stop-datetime/position表跳过误操作的语句来进行基于时间和位置的数据不完全恢复。
对于MyISAM存储引擎,热备份有多种方法,本质其实就是将备份的表加读锁,然后再cp数据文件到备份目录。常用的方法有两种:mysqlhotcopy;手工锁表(flush tables for read),然后cp数据文件到备份目录。
对于InnoDB存储引擎,可以使用ibbackup工具,ibbackup是Innobase公司的一个热备份工具,专门对InnoDB存储引擎进行物理热备份的,此工具是收费滴。
表数据的导出可以用”SELECT … INTO OUTFILE”和mysqldump命令。导入可以用”LOAD DATA INFILE”和mysqlimport命令。
MySQL权限和安全
对于身份认证,MySQL是通过IP地址和用户名联合进行确认的,即同样的用户名,如果来自不同的IP地址,则MySQL将其视为不同的用户。MySQL的权限表在数据库启动的时候就载入了内存,当用户通过身份认证后,就在内存中进行相应权限的存取。
在权限存取的两个过程中,系统会用到”mysql”数据库中的user、host和db这3个最重要的权限表,当然还有procs_priv、tables_priv和columns_priv等表。
在认证过程中,会先从user表中的host、user和password字段来判断连接的IP、用户名和密码是否存在于表中,如果存在,则通过身份认证,否则拒绝连接。通过了身份认证之后,则按照以下权限表的顺序得到数据库权限:user->db->tables_priv->columns_priv,权限范围依次递减,全局权限覆盖局部权限。
所谓的全局权限覆盖局部权限,是指所有数据库都具有相同权限的用户记录并不需要记入db表,而仅仅需要将user表中的select_priv改为”Y”即可。换句话说,user表中每个权限都代表了对所有数据库 都有的权限,而db表只针对于某一个具体的数据库而言。
在使用grant创建账号的时候,如果要赋予Grant_priv权限,则需要在grant语句中加上”with grant option”。
修改密码:”mysqladmin -u user_name -h host_name password ‘newpwd’”;SET PASSWORD [FOR 'user_name'@'host'] = PASSWORD(“newpwd”);grant usage on *.* to ‘user_name’@'host’ identified by ‘newpwd’;直接更改数据库的user表,注意要用PASSWORD函数。
MySQL复制:看书,29章。
This entry was posted in
MySQL . Bookmark the
permalink .