在大多数情况下,不需要修改mysql的默认配置,但是在默认配置不适宜用户的情况下,mysql提供了大量变量,这些值可以进行修改,以便满足定制要求。有写变量可以在mysql服务器启动时进行定义,还有一些变量是在服务器运行中定义。
使用选项文件来配置mysql:
在mysql选项的推荐方法是通过一个选项文件,在linux环境中,此文件是位于/etc目录下的my.cnf文件。可以要求mysql通过在mysql的命令行上指定带-defaults-file选项的文件名,在不同的位置上查找启动选项。选项文件的格式通常比较简单,类似一个windownINI文件,文件按组来划分,每个组包含可变值对,在mysql命令行中指定的任何选项可以放置在这个文件中,前面不必使用双斜线。
mysql带有的所有二进制程序都可以在一个选项文件中读选项,简单地确定程序名作为选项的一个组(通过在方括号中的名称),并且后面跟希望设置的变量,mysql可户籍程序可以使用一个特殊的client组,通常这个组用于保存用户名和口令连接参数。下面是这个命令工作的简单的示例:
[client]
user=timethy
password=greenpeas
mysql发布中带有很多示例配置文件,可以参考my.large.cnf,my-huge.cnf,my-medium.cnf,my-small.cnf文件。通常mysql需要在组[mysql]和[mysqld]中寻找配置选项。在linux环境中,如果使用mysqld_safe mysql包装来启动mysql,也可以使用[mysqld-safe]组来向mysql服务器传递选项。在这种情况下,mysql壳户机试图连接到mysql服务器时,将可以连接一个口令为greenpass的用户timothy。下表列出了可以用于配置mysql的常用的选项。
------------------------------
选项 意义
------------------------------
ansi 使用更为严格的ansisql-99语法
basedir 设置mysql安装目录的位置
datadir 设置mysql数据目录的位置
debug 创建一个排错文件
default-character-set 设置默认字符集
default-table-type 为新表设置默认表类型
flush 在每个sql命令后向磁盘写变化
init-file 设置包含在启动时执行的sql命令文件
language 设置错误信息的语言
log 向日志写mysql信息(连接和查询)
log-long-format 向每个日志项目添加其他信息(类似用户名和时间戳)
log-error 向日志写关键错误信息
log-warnings 向日志写警告信息
log-slow-queries 向日志写慢执行查询
log-bin 向二进制日志(用于备份和复制)写修改数据的查询
port 设置监听服务器的端口,以便客户机连接
safe-show-database 只想已登陆的用户显示数据库
skip-bdb 禁止bdb表处理
skip-innodb 禁止innodb表处理
skip-grant-tables 执行访问控制时绕过授权表
skip-networking 只允许本地请求,停止监听tcp/ip请求
transaction-isolation 设置默认事务隔离等级
user 确定可以作为用户运行的服务器
tmpdir 设置临时文件区的位置
------------------------------
所有这些选项都可以在mysql命令行中指定,示例如下:
#/usr/local/mysql/bin/mysqld_safe --socket=/usr/tmp/mysql.socket --user=mysql --skip-networking &
当存在多种选项文件或相同选项指定了多次不同值时,mysql使用最后发现的值,因为mysql在命令行变量之前读选项文件,这意味着命令行指定的选项权限优先于选项文件中的选项。
mysql服务器处于运行状态时,可以使用set命令修改系统和连接变量,命令格式为:
set variable=value,variable=value,…
示例:
mysql> set table_type=innodb;
Query OK, 0 rows affected, 1 warning (0.00 sec)
使用set命令的变量集,根据set关键字后面使用的是global或session关键字,可以全局设置在所有会话上,或者只设置在当前会话上,下面的示例限制服务器在任何时间内的连接10个客户机,并设置读缓存大小为250kb:
mysql> set global max_user_connections=10,session read_buffer_size=250000;
Query OK, 0 rows affected (0.01 sec)
如果应用服务器与mysql服务器是同一个服务器,同时不希望mysql客户机可以从其他主机上连接,可以使用--skip-networking选项来关闭对tcp/ip的监听来提高mysql的安全性。
set命令的重要变量
------------------------------
变量 功能
------------------------------
autocommit 切换mysql是否试图自动提交打开事务
key_buffer_size 设置索引使用的缓冲大小
table_cache 设置mysql可以在任何时间内打开的表的总数
concurrent_inserts 在myISAM表中允许inser和select并发
table_type 设置默认表的类型
interactive_timeout 设置对话客户机连接的时限
language 设置错误信息使用的语言
sort_buffer_size 为读表设置缓冲规模
max_binlog_size 设置循环之前二进制日志的最大规模
max_connections 设置在任意具体时刻允许客户机连接的最大数量
max_user_connections 设置在任意时刻可激活的单独客户机连接的最大数量
max_tmp_tables 设置任何具体时刻客户机可以打开临时表的最大数量
query_cache_type 查询高速缓存开关切换
query_cache_size 设置高速缓存的最大数量
tmpdir 设置临时文件区的位置
tx_isolation 设置事务独立等级
----------------------------
检索变量值
变量一旦已经通过set或启动选项设置,可以使用showvsriables命令来查看启动项。showvariables的输出结果很大,可以和like语句组合使用。
mysql> show variables like 'table_type';l
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| table_type | InnoDB |
+---------------+--------+
1 row in set (0.00 sec)
mysql> show variables like '%innodb%';
+---------------------------------+------------------------+
| Variable_name | Value |
+---------------------------------+------------------------+
| have_innodb | YES |
| innodb_additional_mem_pool_size | 1048576 |
| innodb_autoextend_increment | 8 |
| innodb_buffer_pool_
awe_mem_mb | 0 |
| innodb_buffer_pool_size | 8388608 |
| innodb_checksums | ON |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
| innodb_doublewrite | ON |
| innodb_fast_shutdown | 1 |
| innodb_file_io_threads | 4 |
| innodb_file_per_table | OFF |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_flush_method | |
| innodb_force_recovery | 0 |
| innodb_lock_wait_timeout | 50 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_arch_dir | |
| innodb_log_archive | OFF |
| innodb_log_buffer_size | 1048576 |
| innodb_log_file_size | 5242880 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_max_dirty_pages_pct | 90 |
| innodb_max_purge_lag | 0 |
| innodb_mirrored_log_groups | 1 |
| innodb_open_files | 300 |
| innodb_support_xa | ON |
| innodb_sync_spin_loops | 20 |
| innodb_table_locks | ON |
| innodb_thread_concurrency | 8 |
| innodb_thread_sleep_delay | 10000 |
+---------------------------------+------------------------+
34 rows in set (0.01 sec)
也可以通过select@@variable的格式来查询系统变量的值:
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.01 sec)