MySQL效能监控工具mysqlreport安装和中文说明 (ubuntu)
2012/10/26 11:26 ArthurXF
管理 MySQL 最让人困扰的就是如何有效的掌握 MySQL 的健康状况,因为 MySQL 虽然有提供许多系统变量值供您参考,但这些零散的数据若要手动搜集与过滤将会是一件十分没有效率的事情(除非您写 Scripts 去分析)。而接下来要介绍的这套 “工具” 其实是由 hackmysql.com 的站长所撰写的 Perl Scritps,旨在协助 MySQL DBA 搜集与分析 MySQL 的运作状况。
官方网站: http://hackmysql.com/
软件下载: http://hackmysql.com/mysqlreport
mysqlreport以很友好的方式显示 MySQL状态变。事实上,它几乎报告了所有的状态。不像 SHOW STATUS 只是在显示了100多个状态值,mysqlreport 则以人性化的方式阐释和格式化了这些状态值,大大增加了其可读性。可以 点击这里 查看mysqlreport的例子。
mysqlreport 的好处是可以快速的查看各种状态参数组,从而了解服务器的运行状态情况,而无需从 SHOW STATUS 的结果中人工计算。例如索引读取比率是个重要的参数,但是 SHOW STATUS 中并没有显示;它是一个推断值(key_reads 和 key_read_requests 的比值)。
mysql命令行中精彩使用下面的指令来获取当前数据库的实时状态:
mysql>show status;
mysql>show innodb status;
但是他们的显示结果不太友好,我们需要更好的更加人性化的分析结果,而不是堆出来一堆数字。mysqlreport是一个第三方的Mysql状态报告工具,它把mysql的show status 和 show innodb status的结果进行一系列的后期处理,让可读性更强,更友好。 下面是mysqlreport的安装过程:
MySQLReport 是用perl语言编写,所以想要运行它首先需要安装perl环境;它还要与MySQL数据库连接,所以还需要安装数据库接口 DBI 和 数据库驱动 DBD-MySQL 。
# perl -v //如果显示perl版本说明perl环境已经安装
安装DBI
# wget http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
# tar zxvf DBI-1.616.tar.gz
# cd DBI-1.616
# perl Makefile.PL
# make
#make test
# make
# make install
安装DBD-mysql
我看了DBD::mysql的README,原来ubuntu是不需要安装DBD::mysql
下载mysqlreport
# cd /usr/local/src/
# wget http://hackmysql.com/scripts/mysqlreport-3.5.tgz
解压mysqlreport
# tar zxvf mysqlreport-3.5.tgz
# cd mysqlreport-3.5
# mysqlreport --help
mysqlreport v3.5 Apr 16 2008
mysqlreport makes an easy-to-read report of important MySQL status values.
Command line options (abbreviations work):
--user USER Connect to MySQL as USER
--password PASS Use PASS or prompt for MySQL user's password
--host ADDRESS Connect to MySQL at ADDRESS
--port PORT Connect to MySQL at PORT
--socket SOCKET Connect to MySQL at SOCKET
--no-mycnf Don't read ~/.my.cnf
--infile FILE Read status values from FILE instead of MySQL
--outfile FILE Write report to FILE
--email ADDRESS Email report to ADDRESS (doesn't work on Windows)
--flush-status Issue FLUSH STATUS; after getting current values
--relative X Generate relative reports. If X is an integer,
reports are live from the MySQL server X seconds apart.
If X is a list of infiles (file1 file2 etc.),
reports are generated from the infiles in the order
that they are given.
--report-count N Collect N number of live relative reports (default 1)
--detach Fork and detach from terminal (run in background)
--help Prints this
--debug Print debugging information
Visit http://hackmysql.com/mysqlreport for more information.
使用mysqlreport
# mysqlreport -user *** -password ***
以下是mysqlreport的命令选项
命令行选项的格式是 --选项,不过 -选项 的格式也可以。所有的选项都有其缩写,只要是唯一的。例如,选项 --host 可以缩写成 --ho,不过不能写成 --h,因为 --h 有歧义,可能是 --host 或者 --help。
选项列表
--user USER
--password
--host ADDRESS
--port PORT
--socket SOCKET
--no-mycnf
--help 这些选项是模拟其他标准应用程序的。从 2.3 版本开始,--password 可以在后面加上参数,如 "--password FOO"。如果命令行中只指定了选项
--password 则会提示输入密码。--no-mycnf 告诉 mysqlreport 不要读取 ~/.my.cnf,默认会去读取这个文件。--user 和 --password 总是覆盖从 ~/.my.cnf 中取得的结果。
--infile FILE 直接从文件中读取状态文件,而不是从MySQL的 SHOW STATUS 中读取。文件内容通常是从 SHOW STATUS 的结果中取得,并且包含格式化字符(|, +, -)。mysqlreport 认为这样的文件"状态名 数值"格式的,状态包含字符和下划线(A-Z 和 _),数值则是非负整数。在状态名和数值之间的任何内容都会被忽略。mysqlreport 也需要以下MySQL服务器系统变量:version, table_cache, max_connections, key_buffer_size, query_cache_size, thread_cache_size。
INFILE 的格式也可以是 "名字 = 数值"这样的,名字可以使是上面提到的各种变量名,数值是非负整数,可能后面带有M或者其他单位(根据版本不同而定)。例如,想要指定 18M 的 key_buffer_size:key_buffer_size = 18M。或者,256 个 table_cache:table_cache = 256。M 指兆字节,而非百万。因此 18M 是 18,874,368,而非 18,000,000。如果这些服务器变量没有指定,则使用默认以下默认值:0.0.0, 64, 100, 8M, 0, 0,就可能会让报告结果看起来很奇怪。
注意:MySQL 服务器版本在 5.1.3 或更新时,尽管系统变量 table_cache 改成了 table_open_cache,但是读取本地文件时仍采用 table_cache。
--outfile FILE 在屏幕显示完报告结果后,将结果写入文件中。mysqlreport 的内部机制总是先将结果写入临时文件中。然后将该临时文件里的内容打印到屏幕上。然后,如果指定了 --outfile 选项,则将临时文件拷贝成 OUTFILE。如果指定选项 --email,则会删除临时文件。
--email ADDRESS 在屏幕显示完结果后,将结果发送到邮件地址 ADDRESS 中去。欲该选项,需要在 /usr/sbin/ 目录下有 sendmail 程序,因此无法在 windows 平台下使用。/usr/sbin/sendmail 可以符号链接到 qmail,或者任何其他能模拟 sendmail -t 方式的 MTA 程序。邮件来源是:mysqlreport,主题是:MySQL status report on HOST,HOST 是 mysqlreport所在的主机名,可能是读取到的 --host 值,默认是 localhost。
--flush-status 显示完报告后,执行 "FLUSH STATUS;" 语句。如果没有权限,则 DBD::mysql 会显示返回值。
--relative (-r) X mysqlreport 通常情况下报告的是自从 MySQL 服务器启动以来的状态信息。--relative 选项则是令 mysqlreport 产生一份自从上次报告以来的相关报告。
如果 --relative X 的 X 值是一个整数,则 mysqlreport 会在隔 X 秒后再次产生一份 MySQL 服务器的状态报告。产生报告的次数是由 --report-count 选项来控制的。默认是产生 1 份相关的报告。例如,指定 --relative 的值为 60,则会产生 2 份报告:第一份会马上生成,第二份会在 60 秒后再次生成。第二份报告中的数值会和前面的那份相关。例如,前面那份中总共有 10.00k 次查询,在这 60 秒的间隔时间里接受了新的 1.00k 次查询,则第二份的报告中的总查询次数是 1.00k 而非 11.00k 次。
如果 --relative 选项的值也可以是本地文件(类似 --infile 选项的用法),那么 mysqlreport 会按照参数值中文件的顺序来依次产生状态报告。因此,根据这些文件产生的时间来指定选项的值非常重要:较早产生的文件放在参数的前面。第一个文件中必须有手工添加的系统变量,例如:key_buffer_size、table_cache 等。每个文件中可以有多组 "SHOW STATUS" 的结果。注意:通过 "mysqladmin -r -i N extended" 产生的状态文件无法使用,因为 mysqladmin 的 -r 参数已经令其产生了具有相对性的状态值了。
由于 mysqlreport 首先会把状态报告写到临时文件中,如果 --relative 的值是 整数(而非 本地文件)时,mysqlreport 会显示它把文件写到哪了。那么就可以直接通过查看这些文件内容来观察服务器的状况了。
--report-count (-c) N 生成 N 份相关的报告。本选项只有在同时启用 --relative 选项后才有效。mysqlreport 会自动产生 N+1 份报告:第一份基本报告,以及后面的 N 份相关报告。
--detach 若指定本选项,则 mysqlreport 会派生出进程来,不只是在屏幕显示结果,还会转入后台继续运行。派生新进程后,mysqlreport 会报告它把结果写入哪个临时文件了。本选项还可以指定 --outfile 或 --email 的一个。如果没有指定 --outfile 或 --email 的值,则产生的临时文件会被删除,因为 mysqlreport 派生出新进程后,无法再将结果打印到终端屏幕上了。本选项如果和 --relative 一起使用的话就更有意义了,这样 mysqlreport 就能定时报告信息,而无需人工登录等方式在中断执行了。使用如下的命令,就能让 mysqlrepot 隔一个小时再次产生一次报告,并将结果发送到自己的信箱中去:
# mysqlreport -r 3600 -detach -email host@domain.com
一个小时候后,mysqlreport 通过email发送报告,删除临时文件,并且干净地终止。
--debug 显示调试信息。
--dtq (Questions 报告的 Total 部分中) 显示所有的查询分布报告。这些查询主要包括以下四部分:DMS (见下面)、COM_ (见下面)、COM_QUIT(见 COM_QUIT and Questions)、以及其他未知。每部分根据其总数倒序显示。
--dms (Questions 报告的 DMS 部分中) 显示所有的数据维护语句(DMS)报告。DMS是下面文档 13.2. Data Manipulation Statements 中提到的那些(当前主要有:SELECT, INSERT, REPLACE, UPDATE, and DELETE)。每个 DMS 根据其总数倒序显示。
--com N (Questions 报告之后) 以降序显示最多 N 个 非DMS Com_ 状态值。如果没有指定 N 的值,则默认是 3。所谓的非DMS Com_ 状态值,包括:Com_change_db、Com_show_tables、Com_rollback 等。
--sas (Questions 报告之后) 显示所有的 Select_ 和 Sort_ 报告。详情请看 MySQL Select and Sort Status Variables。
--qcache 如果打开查询缓存的话,则显示查询缓存状态报告
--tab (Create Temp 报告之后) 显示 线程、放弃的、流量 等状态报告。从 mysqlreport v2.3 开始,线程状态是从 Threads_ 状态值读取。
--innodb 显示 InnoDB 状态报告,包括MySQL 5.0.2以后才支持的InnoDB 缓冲池,以及5.0.3以后才支持的InnoDB锁状态报告。
--innodb-only 只显示 InnoDB 报告;不显示其他报告。
--dpr 显示 InnoDB 数据,页,行报告。
--all 如果可能,则显示所有的状态报告。一些报告,比如查询缓存、InnoDB等需要特定版本的MySQL或者其他特性才能支持。例如,尽管服务器支持查询缓存,但是它被禁用了,则不管是否指定了 --qcache 或者 --all,都不会显示查询缓存的报告。
官方网站: http://hackmysql.com/
软件下载: http://hackmysql.com/mysqlreport
mysqlreport以很友好的方式显示 MySQL状态变。事实上,它几乎报告了所有的状态。不像 SHOW STATUS 只是在显示了100多个状态值,mysqlreport 则以人性化的方式阐释和格式化了这些状态值,大大增加了其可读性。可以 点击这里 查看mysqlreport的例子。
mysqlreport 的好处是可以快速的查看各种状态参数组,从而了解服务器的运行状态情况,而无需从 SHOW STATUS 的结果中人工计算。例如索引读取比率是个重要的参数,但是 SHOW STATUS 中并没有显示;它是一个推断值(key_reads 和 key_read_requests 的比值)。
mysql命令行中精彩使用下面的指令来获取当前数据库的实时状态:
mysql>show status;
mysql>show innodb status;
但是他们的显示结果不太友好,我们需要更好的更加人性化的分析结果,而不是堆出来一堆数字。mysqlreport是一个第三方的Mysql状态报告工具,它把mysql的show status 和 show innodb status的结果进行一系列的后期处理,让可读性更强,更友好。 下面是mysqlreport的安装过程:
MySQLReport 是用perl语言编写,所以想要运行它首先需要安装perl环境;它还要与MySQL数据库连接,所以还需要安装数据库接口 DBI 和 数据库驱动 DBD-MySQL 。
# perl -v //如果显示perl版本说明perl环境已经安装
安装DBI
# wget http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
# tar zxvf DBI-1.616.tar.gz
# cd DBI-1.616
# perl Makefile.PL
# make
#make test
# make
# make install
安装DBD-mysql
我看了DBD::mysql的README,原来ubuntu是不需要安装DBD::mysql
下载mysqlreport
# cd /usr/local/src/
# wget http://hackmysql.com/scripts/mysqlreport-3.5.tgz
解压mysqlreport
# tar zxvf mysqlreport-3.5.tgz
# cd mysqlreport-3.5
# mysqlreport --help
mysqlreport v3.5 Apr 16 2008
mysqlreport makes an easy-to-read report of important MySQL status values.
Command line options (abbreviations work):
--user USER Connect to MySQL as USER
--password PASS Use PASS or prompt for MySQL user's password
--host ADDRESS Connect to MySQL at ADDRESS
--port PORT Connect to MySQL at PORT
--socket SOCKET Connect to MySQL at SOCKET
--no-mycnf Don't read ~/.my.cnf
--infile FILE Read status values from FILE instead of MySQL
--outfile FILE Write report to FILE
--email ADDRESS Email report to ADDRESS (doesn't work on Windows)
--flush-status Issue FLUSH STATUS; after getting current values
--relative X Generate relative reports. If X is an integer,
reports are live from the MySQL server X seconds apart.
If X is a list of infiles (file1 file2 etc.),
reports are generated from the infiles in the order
that they are given.
--report-count N Collect N number of live relative reports (default 1)
--detach Fork and detach from terminal (run in background)
--help Prints this
--debug Print debugging information
Visit http://hackmysql.com/mysqlreport for more information.
使用mysqlreport
# mysqlreport -user *** -password ***
以下是mysqlreport的命令选项
命令行选项的格式是 --选项,不过 -选项 的格式也可以。所有的选项都有其缩写,只要是唯一的。例如,选项 --host 可以缩写成 --ho,不过不能写成 --h,因为 --h 有歧义,可能是 --host 或者 --help。
选项列表
--user USER
--password
--host ADDRESS
--port PORT
--socket SOCKET
--no-mycnf
--help 这些选项是模拟其他标准应用程序的。从 2.3 版本开始,--password 可以在后面加上参数,如 "--password FOO"。如果命令行中只指定了选项
--password 则会提示输入密码。--no-mycnf 告诉 mysqlreport 不要读取 ~/.my.cnf,默认会去读取这个文件。--user 和 --password 总是覆盖从 ~/.my.cnf 中取得的结果。
--infile FILE 直接从文件中读取状态文件,而不是从MySQL的 SHOW STATUS 中读取。文件内容通常是从 SHOW STATUS 的结果中取得,并且包含格式化字符(|, +, -)。mysqlreport 认为这样的文件"状态名 数值"格式的,状态包含字符和下划线(A-Z 和 _),数值则是非负整数。在状态名和数值之间的任何内容都会被忽略。mysqlreport 也需要以下MySQL服务器系统变量:version, table_cache, max_connections, key_buffer_size, query_cache_size, thread_cache_size。
INFILE 的格式也可以是 "名字 = 数值"这样的,名字可以使是上面提到的各种变量名,数值是非负整数,可能后面带有M或者其他单位(根据版本不同而定)。例如,想要指定 18M 的 key_buffer_size:key_buffer_size = 18M。或者,256 个 table_cache:table_cache = 256。M 指兆字节,而非百万。因此 18M 是 18,874,368,而非 18,000,000。如果这些服务器变量没有指定,则使用默认以下默认值:0.0.0, 64, 100, 8M, 0, 0,就可能会让报告结果看起来很奇怪。
注意:MySQL 服务器版本在 5.1.3 或更新时,尽管系统变量 table_cache 改成了 table_open_cache,但是读取本地文件时仍采用 table_cache。
--outfile FILE 在屏幕显示完报告结果后,将结果写入文件中。mysqlreport 的内部机制总是先将结果写入临时文件中。然后将该临时文件里的内容打印到屏幕上。然后,如果指定了 --outfile 选项,则将临时文件拷贝成 OUTFILE。如果指定选项 --email,则会删除临时文件。
--email ADDRESS 在屏幕显示完结果后,将结果发送到邮件地址 ADDRESS 中去。欲该选项,需要在 /usr/sbin/ 目录下有 sendmail 程序,因此无法在 windows 平台下使用。/usr/sbin/sendmail 可以符号链接到 qmail,或者任何其他能模拟 sendmail -t 方式的 MTA 程序。邮件来源是:mysqlreport,主题是:MySQL status report on HOST,HOST 是 mysqlreport所在的主机名,可能是读取到的 --host 值,默认是 localhost。
--flush-status 显示完报告后,执行 "FLUSH STATUS;" 语句。如果没有权限,则 DBD::mysql 会显示返回值。
--relative (-r) X mysqlreport 通常情况下报告的是自从 MySQL 服务器启动以来的状态信息。--relative 选项则是令 mysqlreport 产生一份自从上次报告以来的相关报告。
如果 --relative X 的 X 值是一个整数,则 mysqlreport 会在隔 X 秒后再次产生一份 MySQL 服务器的状态报告。产生报告的次数是由 --report-count 选项来控制的。默认是产生 1 份相关的报告。例如,指定 --relative 的值为 60,则会产生 2 份报告:第一份会马上生成,第二份会在 60 秒后再次生成。第二份报告中的数值会和前面的那份相关。例如,前面那份中总共有 10.00k 次查询,在这 60 秒的间隔时间里接受了新的 1.00k 次查询,则第二份的报告中的总查询次数是 1.00k 而非 11.00k 次。
如果 --relative 选项的值也可以是本地文件(类似 --infile 选项的用法),那么 mysqlreport 会按照参数值中文件的顺序来依次产生状态报告。因此,根据这些文件产生的时间来指定选项的值非常重要:较早产生的文件放在参数的前面。第一个文件中必须有手工添加的系统变量,例如:key_buffer_size、table_cache 等。每个文件中可以有多组 "SHOW STATUS" 的结果。注意:通过 "mysqladmin -r -i N extended" 产生的状态文件无法使用,因为 mysqladmin 的 -r 参数已经令其产生了具有相对性的状态值了。
由于 mysqlreport 首先会把状态报告写到临时文件中,如果 --relative 的值是 整数(而非 本地文件)时,mysqlreport 会显示它把文件写到哪了。那么就可以直接通过查看这些文件内容来观察服务器的状况了。
--report-count (-c) N 生成 N 份相关的报告。本选项只有在同时启用 --relative 选项后才有效。mysqlreport 会自动产生 N+1 份报告:第一份基本报告,以及后面的 N 份相关报告。
--detach 若指定本选项,则 mysqlreport 会派生出进程来,不只是在屏幕显示结果,还会转入后台继续运行。派生新进程后,mysqlreport 会报告它把结果写入哪个临时文件了。本选项还可以指定 --outfile 或 --email 的一个。如果没有指定 --outfile 或 --email 的值,则产生的临时文件会被删除,因为 mysqlreport 派生出新进程后,无法再将结果打印到终端屏幕上了。本选项如果和 --relative 一起使用的话就更有意义了,这样 mysqlreport 就能定时报告信息,而无需人工登录等方式在中断执行了。使用如下的命令,就能让 mysqlrepot 隔一个小时再次产生一次报告,并将结果发送到自己的信箱中去:
# mysqlreport -r 3600 -detach -email host@domain.com
一个小时候后,mysqlreport 通过email发送报告,删除临时文件,并且干净地终止。
--debug 显示调试信息。
--dtq (Questions 报告的 Total 部分中) 显示所有的查询分布报告。这些查询主要包括以下四部分:DMS (见下面)、COM_ (见下面)、COM_QUIT(见 COM_QUIT and Questions)、以及其他未知。每部分根据其总数倒序显示。
--dms (Questions 报告的 DMS 部分中) 显示所有的数据维护语句(DMS)报告。DMS是下面文档 13.2. Data Manipulation Statements 中提到的那些(当前主要有:SELECT, INSERT, REPLACE, UPDATE, and DELETE)。每个 DMS 根据其总数倒序显示。
--com N (Questions 报告之后) 以降序显示最多 N 个 非DMS Com_ 状态值。如果没有指定 N 的值,则默认是 3。所谓的非DMS Com_ 状态值,包括:Com_change_db、Com_show_tables、Com_rollback 等。
--sas (Questions 报告之后) 显示所有的 Select_ 和 Sort_ 报告。详情请看 MySQL Select and Sort Status Variables。
--qcache 如果打开查询缓存的话,则显示查询缓存状态报告
--tab (Create Temp 报告之后) 显示 线程、放弃的、流量 等状态报告。从 mysqlreport v2.3 开始,线程状态是从 Threads_ 状态值读取。
--innodb 显示 InnoDB 状态报告,包括MySQL 5.0.2以后才支持的InnoDB 缓冲池,以及5.0.3以后才支持的InnoDB锁状态报告。
--innodb-only 只显示 InnoDB 报告;不显示其他报告。
--dpr 显示 InnoDB 数据,页,行报告。
--all 如果可能,则显示所有的状态报告。一些报告,比如查询缓存、InnoDB等需要特定版本的MySQL或者其他特性才能支持。例如,尽管服务器支持查询缓存,但是它被禁用了,则不管是否指定了 --qcache 或者 --all,都不会显示查询缓存的报告。
长短连接区别
不同于mysql_connect的短连接,mysql_pconnect持久连接的时候,将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
当执行完毕后,到 mysql 服务器的持久连接不会被关闭,此连接将保持打开以备以后使用,即mysql_close() 不会关闭由 mysql_pconnect() 建立的连接。
Apache与长连接管理
PHP本身并没有数据库连接池的概念,但是Apache有进程池的概念, 一个Apache子进程结束后会被放回进程池, 这也就使得用mysql_pconnect打开的的那个mysql连接资源可以不被释放,而是依附在相应的Apache子进程上保存到了进程池中。于是在下一个连接请求时它就可以被复用。但是在Apache并发访问量大的时候,如果使用mysql_pconnect,会由于之前的Apache子进程占用的MySQL连接没有close, 很快使MySQL达到最大连接数,使得之后的请求可能得不到响应。
当然,高并发情况下也不能怪罪pconnect,用短连接频繁连接mysql,也一样有问题。在没有连接池的情况下,用apache做连接池管理是比较好的选择。
不同于mysql_connect的短连接,mysql_pconnect持久连接的时候,将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
当执行完毕后,到 mysql 服务器的持久连接不会被关闭,此连接将保持打开以备以后使用,即mysql_close() 不会关闭由 mysql_pconnect() 建立的连接。
Apache与长连接管理
PHP本身并没有数据库连接池的概念,但是Apache有进程池的概念, 一个Apache子进程结束后会被放回进程池, 这也就使得用mysql_pconnect打开的的那个mysql连接资源可以不被释放,而是依附在相应的Apache子进程上保存到了进程池中。于是在下一个连接请求时它就可以被复用。但是在Apache并发访问量大的时候,如果使用mysql_pconnect,会由于之前的Apache子进程占用的MySQL连接没有close, 很快使MySQL达到最大连接数,使得之后的请求可能得不到响应。
当然,高并发情况下也不能怪罪pconnect,用短连接频繁连接mysql,也一样有问题。在没有连接池的情况下,用apache做连接池管理是比较好的选择。
在服务器上mysql 导入导出 sql文件
2011/10/17 12:16 ArthurXF
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u root -p biweb> biweb.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u root -p biweb users> biweb_users.sql
3.导出一个数据库结构
mysqldump -u root -p -d --add-drop-table biweb>biweb.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4.导入数据库
mysql -u 用户名 -p 数据库名 < 存放位置
mysql -u root -p biwebtuan >
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u root -p biweb> biweb.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u root -p biweb users> biweb_users.sql
3.导出一个数据库结构
mysqldump -u root -p -d --add-drop-table biweb>biweb.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
4.导入数据库
mysql -u 用户名 -p 数据库名 < 存放位置
mysql -u root -p biwebtuan
用bin日志中恢复MySQL数据库
2011/04/18 16:57 ArthurXF
如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据。“mysqlbinlog:用于处理二进制日志文件的实用工具”。
要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径。如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的形式给出。启用二进制日志的选项为–log-bin。要想确定当前的二进制日志文件的文件名,输入下面的MySQL语句:
SHOW BINLOG EVENTS G
你还可以从命令行输入下面的内容:
mysql –user=root -pmy_pwd -e ‘SHOW BINLOG EVENTS G’
将密码my_pwd替换为服务器的root密码。
1. 指定恢复时间
对于MySQL 4.1.4,可以在mysqlbinlog语句中通过–start-date和–stop-date选项指定DATETIME格式的起止时间。举例说明,假设在今天上午10:00(今天是2006年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你可以恢复前晚上的备份,并输入:
mysqlbinlog –stop-date=”2005-04-20 9:59:59″ /var/log/mysql/bin.123456
| mysql -u root -pmypwd
该命令将恢复截止到在–stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你可以用起使日期和时间再次运行mysqlbinlog:
mysqlbinlog –start-date=”2005-04-20 10:01:00″ /var/log/mysql/bin.123456
| mysql -u root -pmypwd
在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。
2. 指定恢复位置
也可以不指定日期和时间,而使用mysqlbinlog的选项–start-position和–stop-position来指定日志位置。它们的作用与起止日选项相同,不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法,特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号,可以运行mysqlbinlog寻找执行了不期望的事务的时间范围,但应将结果重新指向文本文件以便进行检查。操作方法为:
mysqlbinlog –start-date=”2005-04-20 9:55:00″ –stop-date=”2005-04-20 10:05:00″
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
该命令将在/tmp目录创建小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件,寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作,应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后,你应从命令行输入下面内容:
mysqlbinlog –stop-position=”368312″ /var/log/mysql/bin.123456
mysqlbinlog –start-position=”368315″ /var/log/mysql/bin.123456
上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间
3.指定数据库名
如果一台服务器上有多个库,指定数据库名将不会干扰其他的数据库。格式如下:
mysqlbinlog --database="5217u" --start-date="2012-04-01 00:00:00" --stop-date="2012-05-01 08:00:00" mysql-bin.000088 > restore.sql
切记database是库名不是表名。
4.整理干净的sql文档
虽然我们可以通过上面种种条件指定恢复相应的数据,不过mysalbinlog生成的sql文件会有很多其他的代码。造成sql文件过大,打开缓慢甚至打不开。
我这里给出下列vi命令,来精简sql文件。
删除所有#号开头的行
:%s/^#.*//g
删除所有SET开头的行
:%s/^SET.*//g
删除所有BEGIN的行
:%s/^BEGIN//g
删除所有COMMIT的行
:%s/^COMMIT//g
删除所有的/*!*/;的行
:%s/\/\*\!\*\/;//g
删除/*!..*/的行
:%s/\/\*\!.*//g
删除空行
:g/^$/d
下面是我清除问题数据留底的,读者不能直接使用,不过可以借鉴里面的,跨行多行删除的正则表达式写法
注意:跨行多行的写法只支持vim,vi是不支持的
:%s/^REPLACE INTO biweb_d\_.\{-})$//g
:%s/^REPLACE INTO biweb_u\_.\{-})$//g
:%s/^REPLACE INTO biweb_m\_.\{-})$//g
:%s/^REPLACE INTO biweb_n\_.\{-})$//g
:%s/^REPLACE INTO biweb_a\_.\{-})$//g
:%s/^REPLACE INTO biweb_f\_.\{-})$//g
:%s/^REPLACE INTO biweb_task\_.\{-})$//g
:%s/^UPDATE biweb_d\_.\{-}'$//g
:%s/^UPDATE biweb_a\_.\{-}'$//g
:%s/^UPDATE biweb_u\_.\{-}'$//g
:%s/^UPDATE biweb_m\_.\{-}'$//g
:%s/^DELETE FROM biweb_m.*//g
:%s/^DELETE FROM biweb_d.*//g
:%s/^DELETE FROM biweb_a.*//g
:%s/^UPDATE biweb_task.*//g
:%s/^UPDATE biweb_n\_.\{-})$//g
:%s/^UPDATE biweb_n.*//g
:%s/^ALTER TABLE `biweb_a.*//g
:%s/^UPDATE `5217u`.`biweb_a.*//g
:%s/^UPDATE `5217u`.`biweb_u.*//g
:%s/^UPDATE `5217u`.`biweb_m.*//g
:g/^$/d
要想从二进制日志恢复数据,你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini,取决于你的系统)中找到路径。如果未包含在选项文件中,当服务器启动时,可以在命令行中以选项的形式给出。启用二进制日志的选项为–log-bin。要想确定当前的二进制日志文件的文件名,输入下面的MySQL语句:
SHOW BINLOG EVENTS G
你还可以从命令行输入下面的内容:
mysql –user=root -pmy_pwd -e ‘SHOW BINLOG EVENTS G’
将密码my_pwd替换为服务器的root密码。
1. 指定恢复时间
对于MySQL 4.1.4,可以在mysqlbinlog语句中通过–start-date和–stop-date选项指定DATETIME格式的起止时间。举例说明,假设在今天上午10:00(今天是2006年4月20日),执行SQL语句来删除一个大表。要想恢复表和数据,你可以恢复前晚上的备份,并输入:
mysqlbinlog –stop-date=”2005-04-20 9:59:59″ /var/log/mysql/bin.123456
| mysql -u root -pmypwd
该命令将恢复截止到在–stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句,可能你想要恢复后面发生的活动。根据这些,你可以用起使日期和时间再次运行mysqlbinlog:
mysqlbinlog –start-date=”2005-04-20 10:01:00″ /var/log/mysql/bin.123456
| mysql -u root -pmypwd
在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。
2. 指定恢复位置
也可以不指定日期和时间,而使用mysqlbinlog的选项–start-position和–stop-position来指定日志位置。它们的作用与起止日选项相同,不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法,特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号,可以运行mysqlbinlog寻找执行了不期望的事务的时间范围,但应将结果重新指向文本文件以便进行检查。操作方法为:
mysqlbinlog –start-date=”2005-04-20 9:55:00″ –stop-date=”2005-04-20 10:05:00″
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
该命令将在/tmp目录创建小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件,寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作,应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后,你应从命令行输入下面内容:
mysqlbinlog –stop-position=”368312″ /var/log/mysql/bin.123456
mysqlbinlog –start-position=”368315″ /var/log/mysql/bin.123456
上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时间
3.指定数据库名
如果一台服务器上有多个库,指定数据库名将不会干扰其他的数据库。格式如下:
mysqlbinlog --database="5217u" --start-date="2012-04-01 00:00:00" --stop-date="2012-05-01 08:00:00" mysql-bin.000088 > restore.sql
切记database是库名不是表名。
4.整理干净的sql文档
虽然我们可以通过上面种种条件指定恢复相应的数据,不过mysalbinlog生成的sql文件会有很多其他的代码。造成sql文件过大,打开缓慢甚至打不开。
我这里给出下列vi命令,来精简sql文件。
删除所有#号开头的行
:%s/^#.*//g
删除所有SET开头的行
:%s/^SET.*//g
删除所有BEGIN的行
:%s/^BEGIN//g
删除所有COMMIT的行
:%s/^COMMIT//g
删除所有的/*!*/;的行
:%s/\/\*\!\*\/;//g
删除/*!..*/的行
:%s/\/\*\!.*//g
删除空行
:g/^$/d
下面是我清除问题数据留底的,读者不能直接使用,不过可以借鉴里面的,跨行多行删除的正则表达式写法
注意:跨行多行的写法只支持vim,vi是不支持的
:%s/^REPLACE INTO biweb_d\_.\{-})$//g
:%s/^REPLACE INTO biweb_u\_.\{-})$//g
:%s/^REPLACE INTO biweb_m\_.\{-})$//g
:%s/^REPLACE INTO biweb_n\_.\{-})$//g
:%s/^REPLACE INTO biweb_a\_.\{-})$//g
:%s/^REPLACE INTO biweb_f\_.\{-})$//g
:%s/^REPLACE INTO biweb_task\_.\{-})$//g
:%s/^UPDATE biweb_d\_.\{-}'$//g
:%s/^UPDATE biweb_a\_.\{-}'$//g
:%s/^UPDATE biweb_u\_.\{-}'$//g
:%s/^UPDATE biweb_m\_.\{-}'$//g
:%s/^DELETE FROM biweb_m.*//g
:%s/^DELETE FROM biweb_d.*//g
:%s/^DELETE FROM biweb_a.*//g
:%s/^UPDATE biweb_task.*//g
:%s/^UPDATE biweb_n\_.\{-})$//g
:%s/^UPDATE biweb_n.*//g
:%s/^ALTER TABLE `biweb_a.*//g
:%s/^UPDATE `5217u`.`biweb_a.*//g
:%s/^UPDATE `5217u`.`biweb_u.*//g
:%s/^UPDATE `5217u`.`biweb_m.*//g
:g/^$/d
phpMyAdmin一个用户只能管理自己数据库的设置方法
2010/10/12 11:38 ArthurXF
我们在做虚拟主机的时候,很多都需要为一个客户在phpMyAdmin中开一个帐号管理客户自己网站的数据库,而不希望客户看到别的数据库。网上有很多说修改phpMyAdmin的配置等,种种说法搞的人晕头转向。
其实方法很简单,跟着我ArthurXF学习即可。
1.先用root登录phpMyAdmin
2.在phpMyAdmin首页面右边左部部导航处找到权限栏目。
3.打开权限栏目后,新增一个用户,输入用户名,主机写localhost,再输入密码,切记不要点击旁边的生成密码。
4.Database for user处可以选建立和用户名同名的数据库,当然前提是你要开一个跟用户名同名的数据库给用户。
5.下面的权限可以不选,直接点执行,数据库会默认设定权限的。
6.退出,用新用户名和密码登录phpMyAdmin,一切就OK了。
本文由ArthurXF倾情奉献,转载请保留本人小名,谢谢。
其实方法很简单,跟着我ArthurXF学习即可。
1.先用root登录phpMyAdmin
2.在phpMyAdmin首页面右边左部部导航处找到权限栏目。
3.打开权限栏目后,新增一个用户,输入用户名,主机写localhost,再输入密码,切记不要点击旁边的生成密码。
4.Database for user处可以选建立和用户名同名的数据库,当然前提是你要开一个跟用户名同名的数据库给用户。
5.下面的权限可以不选,直接点执行,数据库会默认设定权限的。
6.退出,用新用户名和密码登录phpMyAdmin,一切就OK了。
本文由ArthurXF倾情奉献,转载请保留本人小名,谢谢。