MySQL系统变量

10. read_only

功能:当启用read_only系统变量时,除了拥有「super」权限的用户之外,服务器不允许客户端执行更新操作。此变量默认是禁用的

作用域:global

动态:√

取值:[0 | 1]

说明:

① read_only仅作为global变量存在,所以更改read_only需要super」权限;

② read_only可以在slave server上独立设置,不受master上设置的影响;

③ master server上对read_only的更改不会被复制到slave上;


即使启用了read_only,服务器也允许如下操作:

 如果服务器是一个replication slave,那么由slave线程执行的更新,则被允许。在设置replication时,可以在slave server上启用read_only,使其只接受来自master的更新,而不接受来自客户端的更新;

 使用analyze table或optimize table语句。只读模式的作用是防止更改表的结构或表的内容。分析和优化并不改变这两者。这意味着,在启用了read_only的replication slave上可以使用mysqlcheck --all-databases --anayze来进行一致性检查;

 temporary表上的操作;

 对日志表的插入(mysql.general_log 和 mysql.slow_log)




9. old_passwords

功能:此变量控制password()函数使用的密码散列方法。它还会影响由create user和grant语句执行的密码散列,这些语句通过identified by子句来指定密码

作用域:global && session

动态:√

取值:[0 | 1]

说明:

① 具体散列方法取决于会话变量;

② 当@@session.old_passwords = 0时,使用4.1哈希方法,生成的密码长度为64 Byte,且以「*」打头

例如:*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29

③ 当@@session.old_passwords = 1时,使用pre-4.1哈希方法,生成的密码长度为16 Byte

例如:0900cf28532c31ea

④ @@session.old_passwords = 1时,password(str)返回值与old_password(str)相同,且old_password()函数不受「old_passwords」值影响

⑤ 使用pre-4.1哈希方法的密码,安全性不高,应该避免

MySQL C++ connector不支持使用pre-4.1密码的账号,会导致连接失败,返回如下错误:

sql error: Authentication plugin 'mysql_old_password' cannot be loaded: /usr/local/mysql/lib/plugin/mysql_old_password.so: cannot open shared object file: No such file or directory



8. foreign_key_checks

功能:开启或禁用InnoDB表外键约束

作用域:global && session

动态:√

取值:[0 | 1]

说明:

① 如果设置为1(默认值),则会检查InnoDB表的外键约束;如果设置为0,外键约束将被忽略,但有一些例外:

    ◇ 当重新创建已经删除的表时,如果表定义不符合引用该表的外键约束,则返回错误;

    ◇ 同样,如果外键定义不正确,ALTER TABLE操作将返回错误

② 禁用外键约束对于,按照不同于父/子关系所要求的顺序重新加载InnoDB表的操作,非常有用;

③ 将foreign_key_checks设置为0还会影响数据定义语句:

    ◇ DROP SCHEMA能够删除一个数据库,即使该数据库包含了具有被其它数据库中的表所引用的外键的表;

    ◇ 而DROP TABLE能够删除具有被其它表所引用的外键的表;

④ 将foreign_key_checks设置为1不会触发对现有表数据的扫描。因此,在foreign_key_checks=0时添加到表中的行将不会被验证以保持数据一致性;

⑤ 使用foreign_key_checks=0,删除外键约束所需的索引会使表处于不一致的状态,并导致在表加载时发生的外键检查失败。为了避免这个问题,请在删除索引之前先删除外键约束;


6. log_output

功能:决定通用查询日志和慢查询日志的输出位置

取值:TABLE(输出到表),FILE(默认值,输出到文件),NONE(不输出,优先级高),以逗号分隔的关键字列表

说明:

①log_output = NONE时,通用查询日志和慢查询日志无论是否开启,均不起作用

②FILE的性能优于TABLE

类型:全局系统变量

设置:set log_output = FILE;



5. slow_query_log

功能:开启/关闭慢查询日志

取值:0关闭,1开启

类型:全局系统变量

设置:set slow_query_log = 1;

说明:慢查询日志起作用的前提是,log_output全局系统变量为FILE



4. innodb_buffer_pool_instances



3. innodb_file_per_table

功能对后续新创建的InnoDB表,使用的表空间类型为FILE_PER_TABLE

取值:0开启,1关闭

作用域:全局

类型:动态变量,随时设置随时生效

设置:set global innodb_file_per_table = 1;


说明

开启该设置后,后续新创建的InnoDB表,其索引和数据,放入自己的表空间,即对应数据库目录下的同名.ibd文件。

关闭该设置后,新表的索引和数据,放入系统表空间,即顶层数据目录下的ibdata文件。


好处:

1. 



2. wait_timeout

功能:决定超时时间

作用域:全局和会话

类型:动态变量,随时设置随时生效

取值:[1, 31536000],单位秒,跨度:1秒——1年,系统默认值28800(8小时)


说明

存在一个全局wait_timeout,每个连接又有各自的wait_timeout、是为会话级wait_timeout。

会话级wait_timeout在连接建立时被初始化,初始值由client连接类型决定:

连接选项包含CLIENT_INTERACTIVE,由全局interactive_timeout初始化,如navicat premium的命令行界面;

否则,由全局wait_timeout初始化,如mysql-connector/c++的Connection* sql::Driver::connect()


设置

set global wait_timeout = n1;

set session wait_timeout = n2;

设置全局级wait_timeout对当前会话级wait_timeout无任何影响,当前会话级wait_timeout已在连接建立时初始化。该设置对后续新建连接的会话级wait_timeout的影响取决于client的连接类型。如果想改变当前会话级wait_timeout,需要显示调用语句二。


查看

show global variables like "wait_timeout";

show session variables like "wait_timeout";



1. innodb_flush_log_at_trx_commit

功能:决定log buffer写入log file最后刷到磁盘的时机

影响:insert操作的速度

取值:0, 1, 2

        0——每秒写入一次,伴随着刷新一次

        1——每当有事物提交,即写入一次刷新一次

        2——每当有事物提交,即写入一次,刷新为每秒一次

作用域:全局

类型:动态变量,随时设置随时生效

设置:set global innodb_flush_log_at_trx_commit = 0;

说明:设置成功后,所有会话均受影响;MySQL重启后,该变量由配置文件初始化,默认为1


安全性:1 > 2 > 0

        进程mysqld崩溃,type0一秒内的事物全丢;

        操作系统崩溃或意外断电,type2一秒内的事物全丢;

        type1符合ACID,安全级别最高。


测试

表结构:

MySQL系统变量_第1张图片

测试工具:mysqlslap

测试条件:单用户执行1000次insert,insert内容相同。

结果:speed0 = 2 * speed2 = 8 * speed1

你可能感兴趣的:(MySQL)