mysql数据库(二)参数说明

来源:互联网 发布:东方网络联系电话 编辑:程序博客网 时间:2024/06/04 23:32

配置文件详解: http://www.jb51.net/article/48082.htm

                             http://blog.itpub.net/12679300/viewspace-1261661/

Mysql 的参数类型:分为动态(dynamic)和静态参数(static);

  动态参数意味着可以再mysql实例运行中进行更改;

  静态参数说明在整个实例声明周期内都不得进行更改,就好像是只读的。

  在动态参数中,有些参数修改可以是基于回话的也可以是基于整个实例的生命周期。

提供两种修改参数的方法,一种是在配置文件中修改,所有的参数都保存在/etc/my.cnf文件中,所以直接修改该参数文件便可修改相应的系统参数。

弊端:修改该参数需要重启后才能生效,当系统上线后一般都不能随便重启,所以该方法很少用;

方法二。如果是动态参数的话,可以直接通过语句修改,例如:
SET sort_buffer_size=10000;   /修改SESSION参数 

 

有3种方式来调用mysqldump:

shell> mysqldump [options] db_name [tables]

shell> mysqldump [options] ---database DB1 [DB2 DB3...]

shell> mysqldump [options] --all--database 如果没有指定任何表或使用了---database或--all--database选项,则转储整个数据库。

--all--database,-A

转储所有数据库中的所有表。与使用---database选项相同,在命令行中命名所有数据库。

--default-character-set=charset

使用charsetas默认字符集。如果没有指定,mysqldump使用utf8。

--delete-master-logs

在主复制服务器上,完成转储操作后删除二进制日志。该选项自动启用--master-data。

--flush-logs,-F

开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合--all--database(或-A)选项使用该选项, 根据每个转储的数据库刷新日志。例外情况是当使用--lock-all-tables或--master-data的时候:在这种情况下,日志只刷新一次,在所有 表被锁定后刷新。如果你想要同时转储和刷新日志,应使用--flush-logs连同--lock-all-tables或--master-data。

--force,-f

在表转储过程中,即使出现SQL错误也继续。

--master-data[=value]

该选项将二进制日志的位置和文件名写入到输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。如果该选项值等于1,位置和文件名被写入 CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。如果选项值等于 2,CHANGE MASTER语句被写成SQL注释。如果value被省略,这是默认动作。

--master-data选项启用--lock-all-tables,除非还指定--single-transaction(在这种情况下,只 在刚开始转储时短时间获得全局读锁定。又见--single-transaction。在任何一种情况下,日志相关动作发生在转储时。该选项自动关闭 --lock-tables。

--password[=password],-p[password]

连接服务器时使用的密码。如果你使用短选项形式(-p),不能在选项和密码之间有一个空格。如果在命令行中,忽略了--password或-p选项后面的 密码值,将提示你输入一个。

--single-transaction

该选项从服务器转储数据之前发出一个BEGIN SQL语句。它只适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。

当使用该选项时,应记住只有InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态。

--single-transaction选项和--lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。

shell> mysqldump --all-databases --master-data=2 >all_databases.sql 或 shell> mysqldump --all-databases--flush-logs --master-data=2 > all_databases.sql 如果表保存在InnoDB存储引擎中,同时使用--master-data和--single-transaction提供了一个很方便的方式来进行适合 点对点恢复的联机备份。

mysqldump -t 数据库名 -uroot -p > xxx.sql 导出数据不导出结构

mysqldump -d 数据库名 -u root -p > xxx.sql 导出结构不导出数据

导出特定表的结构
mysqldump -uroot -p -B 数据库名 --table 表名 > xxx.sql  

MySQL里的wait_timeout

如果你没有修改过MySQL的配置,缺省情况下,wait_timeout的初始值是28800。

wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可 能会遭遇到“MySQL has gone away”之类的问题,

mysql> set global wait_timeout=10;

mysql> show global variables like 'wait_timeout';
+----------------------------+-------+
|Variable_name             | Value |
+----------------------------+-------+
|wait_timeout              | 10    |
+----------------------------+-------+

这里一个容易把人搞蒙的地方是如果查询时使用的是show variables的话,会发现设置好像并没有生效,这是因为单纯使用show variables的话就等同于使用的是show sessionvariables,查询的是会话变量,只有使用show global variables,查询的才是全局变量。

 

原因分析:
1)大量数据访问情况下,mysql connection连接有可能失效
2)长时间不妨问,connection会失效

关于MySQLwait_timeout连接超时问题报错解决方案 
Mysql
服务器默认的“wait_timeout”8小时【也就是默认的值默认是28800秒】,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection,通俗的讲就是一个连接在8小时内没有活动,就会自动断开该连接。 wait timeout的值可以设定,但最多只能是2147483,不能再大了。也就是约24.85 
所以即使你MySQL通过my.ini  
# The TCP/IP Port the MySQL Server will listen on port=3306
下面添加 
# this is myown dinifition for mysql connection timeout wait_timeout=31536000 
interactive_timeout=31536000 
无论超过最大限度多大的数值,只能被MySQL解析为21474832147483天后你的程序该出什么错还是什么错,避免不了

0 0
原创粉丝点击