MySQL的配置消息应该通过两种方法实现,一种是命令行形式,在启动MySQL服务时后边带上有关配置参数,此种方法会在MySQL重启后失效。另外一种是通过写入配置文件,如my.cnf,启动或者重启MySQL服务都会生效,此种方法是永久生效。
启动选项
在MySQL服务命令启动时,带上配置参数
命令格式:
启动命令 --启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n]
例如:
mysqld --default-storage-engine=MyISAM //设置默认存储引擎
错误举例:
mysqld --default-storage-engine = MyISAM //设置默认存储引擎
原因:
因为启动项和值之间的等号不应该有空格
配置参数有长形式和短形式之分,一些作用是一样的,只是写法不一样而已
--host => -h //主机
--port => -P // 端口
--user => -u //客户
--password => -p //密码
--version => -V //版本
......
举例:
mysqld --port=3306
mysqld -P3306
mysqld -P 3306
小心:
密码不应该有空格
mysqld -proot
配置文件
配置文件my.cnf的地点,有可能是以下的几种,如MySQL服务启动时未指定配置文件时,会从以下地方查找读取并初始化。
* /etc/my.cnf
* /etc/mysql/my.cnf
* defaults-extra-file //指定的特外配置文件路径
* SYSCONFDIR/my.cnf //cmake编译安装状态
* $MYSQL_HOME/my.cnf //设置环境变量,默认安装路径
* ~/.my.cnf //客户特殊选项,家目录
* ~/.mylogin.cnf //客户特殊的登录路径选项(仅限软件),mysql_config_editor改写,不是纯文件
小心
1. 在配置文件中指定的启动选项不允许加--前缀,并且每行只指定一个选项,而且=周边应该有空白字符
2. 如果我们在多个配置文件中设置了相同的启动选项,那以末尾一个配置文件中的为准
3. 如果同一个启动选项既出现在命令行中,又出现在配置文件中,那么以命令行中的启动选项为准
4. mysqld --defaults-file=/tmp/myconfig.txt
//在程序启动的时候将只在/tmp/myconfig.txt路径下搜索配置文件。如果文件不存在或无法访问,则会发生错误
配置文件总共应该以下这些组别:mysqld、mysqld_safe、mysql.server、mysql、mysqladmin、mysqldump,应该针对不一样组别进行配置
内容格式
[server]
(详细的启动选项...)
[mysqld]
(详细的启动选项...)
[mysqld_safe]
(详细的启动选项...)
[client]
(详细的启动选项...)
[mysql]
(详细的启动选项...)
[mysqladmin]
(详细的启动选项...)
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log # 优化配置 wait_timeout=10 back_log=600 key_buffer_size = 2048M read_buffer_size = 100M max_allowed_packet = 1000M thread_stack = 192K thread_cache_size = 4 myisam-recover-options = BACKUP max_connections = 4000 max_user_connections = 0 max_connect_errors = 65535 open_files_limit = 10240 ……
小心
1. [server]组下边的启动选项将作用来全部的服务器程序,如mysqld、mysqld_safe、mysql.server
2. [client]组下边的启动选项将作用来全部的软件程序,如mysql、mysqladmin、mysqldump
3. 同一个配置文件中多个组的第一时间级,将以末尾一个出现的组中的启动选项为准
MySQL服务器程序运行过程中会用到超级多波及程序行为的变量,它们被称为MySQL系统变量。
例如:
1. 允许同一时间连入的软件数量用系统变量max_connections表示
2. 表的默认存储引擎用系统变量default_storage_engine表示
3. 查询缓存的大小用系统变量query_cache_size表示
......
格式:
SHOW VARIABLES [LIKE 匹配的模式];
例如:
SHOW VARIABLES LIKE 'default_storage_engine';
mysqld --default-storage-engine=MyISAM --max-connections=10
[mysqld]
default-storage-engine = MyISAM
max-connections = 10
......
小心:
对于启动选项来说,如果启动选项名由多个单词组成,各个单词之间用短划线-或者下划线_连接起来都应该,但是它对应的系统变量的单词之间一定使用下划线_连接起来(即通过show查看或set设置时)
系统变量有那么一点牛逼的一点只是,对于一大半系统变量来说,它们的值应该在服务器程序运行过程中进动作态改写而不用终止并重启服务器
不过系统变量有全局和目前会话作用域之分
GLOBAL:全局变量,波及服务器的全体操作。
SESSION:会话变量,波及某个软件连接的操作。(别名叫LOCAL)
格式:
1. SET [GLOBAL|SESSION] 系统变量名 = 值;
2. SET [@@(GLOBAL|SESSION).]var_name = XXX;
例如:
1. SET GLOBAL default_storage_engine = InnoDB;
2. SET @@GLOBAL.default_storage_engine = InnoDB;
例如:
1. SET SESSION default_storage_engine = InnoDB;
2. SET @@SESSION.default_storage_engine = InnoDB;
3. SET default_storage_engine = InnoDB;//默认 session
格式:SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
1. SHOW SESSION VARIABLES LIKE 'default_storage_engine';
2. SHOW GLOBAL VARIABLES LIKE 'default_storage_engine';
小心:如果某个软件变化了某个系统变量在GLOBAL作用周围的值,并不会波及该系统变量在目前已经连接的软件作用周围为SESSION的值,只会波及后面连入的软件在作用周围为SESSION的值。
并不是全部系统变量都有着GLOBAL和SESSION的作用周围
* 有一些系统变量只有着GLOBAL作用周围,比方说max_connections,表示服务器程序支持同一时间最多有多少个软件程序进行连接
* 有一些系统变量只有着SESSION作用周围,例如insert_id,表示在对某个包含AUTO_INCREMENT列的表进行插入时,该列初始的值
* 有一些系统变量的值既有着GLOBAL作用周围,也有着SESSION作用周围,例如我们前边用到的default_storage_engine,而且其实一大半的系统变量都是这样的
比方说version,表示目前MySQL的版本,我们软件是不应该设置它的值的,就只能在SHOW VARIABLES语句里查看。
启动选项是在程序启动时我们程序员传递的一些参数,而系统变量是波及服务器程序运行行为的变量
* 一大半的系统变量都应该被当作启动选项传入
* 一些系统变量是在程序运行过程中全自动生成的,是不应该当作启动选项来设置,例如auto_increment_offset、character_set_client啥的
* 一些启动选项也不是系统变量,例如defaults-file
为了让我们更加好的了解服务器程序的运行状态,MySQL服务器程序中保护了超级多关于程序运行状态的变量,它们被称为状态变量。
比方说Threads_connected表示目前有多少软件与服务器建立了连接,Handler_update表示已经更新了多少行记录
由于状态变量是用来展现服务器程序运行状况的,所以它们的值就只能由服务器程序自己来设置,我们程序员是不应该设置的
格式:
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
例如:
SHOW STATUS LIKE 'thread%';