Skip to content

MySQL 通用选项

基本通用选项

服务器配置选项

--port

  • 功能:指定MySQL服务器监听的TCP端口
  • 默认值:3306
  • 配置示例
    bash
    mysqld --port=3306
  • 配置文件
    ini
    port = 3306

--socket

  • 功能:指定Unix套接字文件路径(在Unix/Linux系统上)
  • 默认值:/tmp/mysql.sock(根据系统不同可能有所差异)
  • 配置示例
    bash
    mysqld --socket=/var/lib/mysql/mysql.sock
  • 配置文件
    ini
    socket = /var/lib/mysql/mysql.sock

--bind-address

  • 功能:指定MySQL服务器绑定的IP地址
  • 默认值:127.0.0.1(仅本地访问)
  • 配置示例
    bash
    mysqld --bind-address=0.0.0.0
  • 配置文件
    ini
    bind-address = 0.0.0.0

客户端连接选项

--host

  • 功能:指定连接的MySQL服务器主机名或IP地址
  • 默认值:localhost
  • 使用示例
    bash
    mysql --host=192.168.1.100

--user

  • 功能:指定连接MySQL服务器的用户名
  • 使用示例
    bash
    mysql --user=admin

--password

  • 功能:指定连接MySQL服务器的密码
  • 使用示例
    bash
    mysql --password=your_password
  • 安全建议:使用-p而不指定密码,让系统提示输入密码,避免密码明文显示

数据目录与存储选项

数据目录配置

--datadir

  • 功能:指定MySQL数据文件的存储目录
  • 默认值:根据安装方式不同而不同
  • 配置示例
    bash
    mysqld --datadir=/data/mysql
  • 配置文件
    ini
    datadir = /data/mysql

--basedir

  • 功能:指定MySQL安装基础目录
  • 默认值:根据安装方式不同而不同
  • 配置示例
    bash
    mysqld --basedir=/usr/local/mysql
  • 配置文件
    ini
    basedir = /usr/local/mysql

存储引擎选项

--default-storage-engine

  • 功能:指定默认存储引擎
  • 默认值:InnoDB
  • 配置示例
    bash
    mysqld --default-storage-engine=InnoDB
  • 配置文件
    ini
    default-storage-engine = InnoDB

--skip-innodb

  • 功能:禁用InnoDB存储引擎
  • 使用场景:仅使用其他存储引擎时
  • 配置示例
    bash
    mysqld --skip-innodb
  • 配置文件
    ini
    skip-innodb

日志选项

错误日志

--log-error

  • 功能:指定错误日志文件路径
  • 默认值:主机名.err(在数据目录中)
  • 配置示例
    bash
    mysqld --log-error=/var/log/mysql/error.log
  • 配置文件
    ini
    log-error = /var/log/mysql/error.log

通用查询日志

--general-log

  • 功能:启用通用查询日志
  • 默认值:0(禁用)
  • 配置示例
    bash
    mysqld --general-log=1
  • 配置文件
    ini
    general-log = 1

--general-log-file

  • 功能:指定通用查询日志文件路径
  • 默认值:主机名.log(在数据目录中)
  • 配置示例
    bash
    mysqld --general-log-file=/var/log/mysql/general.log
  • 配置文件
    ini
    general-log-file = /var/log/mysql/general.log

慢查询日志

--slow-query-log

  • 功能:启用慢查询日志
  • 默认值:0(禁用)
  • 配置示例
    bash
    mysqld --slow-query-log=1
  • 配置文件
    ini
    slow-query-log = 1

--slow-query-log-file

  • 功能:指定慢查询日志文件路径
  • 默认值:主机名-slow.log(在数据目录中)
  • 配置示例
    bash
    mysqld --slow-query-log-file=/var/log/mysql/slow.log
  • 配置文件
    ini
    slow-query-log-file = /var/log/mysql/slow.log

安全选项

密码与认证

--skip-grant-tables

  • 功能:跳过权限表验证,允许无密码登录
  • 使用场景:重置root密码或修复权限问题
  • 配置示例
    bash
    mysqld --skip-grant-tables
  • 安全注意事项:仅在维护时临时使用,使用后立即关闭

--skip-networking

  • 功能:禁用网络连接,仅允许本地套接字连接
  • 使用场景:仅本地访问的环境,提高安全性
  • 配置示例
    bash
    mysqld --skip-networking
  • 配置文件
    ini
    skip-networking

SSL配置

--ssl

  • 功能:启用SSL连接
  • 默认值:根据编译选项不同而不同
  • 配置示例
    bash
    mysqld --ssl=1
  • 配置文件
    ini
    ssl = 1

--ssl-ca

  • 功能:指定CA证书文件路径
  • 配置示例
    bash
    mysqld --ssl-ca=/path/to/ca.pem
  • 配置文件
    ini
    ssl-ca = /path/to/ca.pem

性能相关选项

缓冲区大小

--key-buffer-size

  • 功能:指定MyISAM索引缓冲区大小
  • 默认值:8M
  • 配置示例
    bash
    mysqld --key-buffer-size=64M
  • 配置文件
    ini
    key-buffer-size = 64M

--sort-buffer-size

  • 功能:指定每个连接的排序缓冲区大小
  • 默认值:256K
  • 配置示例
    bash
    mysqld --sort-buffer-size=1M
  • 配置文件
    ini
    sort-buffer-size = 1M

连接管理

--max-connections

  • 功能:指定最大连接数
  • 默认值:151
  • 配置示例
    bash
    mysqld --max-connections=500
  • 配置文件
    ini
    max-connections = 500

--wait-timeout

  • 功能:指定非活动连接的超时时间(秒)
  • 默认值:28800(8小时)
  • 配置示例
    bash
    mysqld --wait-timeout=3600
  • 配置文件
    ini
    wait-timeout = 3600

复制相关选项

主从复制

--server-id

  • 功能:指定服务器唯一ID,用于复制
  • 默认值:1
  • 配置示例
    bash
    mysqld --server-id=1
  • 配置文件
    ini
    server-id = 1

--log-bin

  • 功能:启用二进制日志,用于复制
  • 默认值:禁用
  • 配置示例
    bash
    mysqld --log-bin=mysql-bin
  • 配置文件
    ini
    log-bin = mysql-bin

常用客户端选项

mysql客户端

--database-D

  • 功能:指定连接后使用的数据库
  • 使用示例
    bash
    mysql --database=test

--execute-e

  • 功能:执行指定的SQL语句并退出
  • 使用示例
    bash
    mysql --execute="SELECT * FROM users"

--silent-s

  • 功能:静默模式,减少输出信息
  • 使用示例
    bash
    mysql --silent

mysqldump客户端

--all-databases-A

  • 功能:导出所有数据库
  • 使用示例
    bash
    mysqldump --all-databases > all_databases.sql

--databases-B

  • 功能:指定要导出的数据库
  • 使用示例
    bash
    mysqldump --databases db1 db2 > databases.sql

选项使用最佳实践

配置文件管理

  1. 使用配置文件:优先使用配置文件(my.cnf或my.ini)而非命令行选项
  2. 配置文件分段:使用[mysqld]、[mysql]等分段管理不同程序的配置
  3. 版本控制:对配置文件进行版本控制,记录变更历史

性能优化

  1. 根据硬件调整:根据服务器硬件配置调整缓冲区大小等参数
  2. 监控与调整:定期监控数据库性能,根据实际情况调整选项
  3. 避免过度配置:不要盲目增大缓冲区大小,可能导致内存不足

安全配置

  1. 最小权限:使用最小必要的权限配置
  2. 定期更新:定期更新MySQL版本,应用安全补丁
  3. 禁用不必要功能:禁用不需要的存储引擎和功能

运维管理

  1. 文档化:记录所有配置变更和理由
  2. 测试环境验证:在测试环境验证配置变更后再应用到生产环境
  3. 备份配置:定期备份配置文件,以便在故障时快速恢复

常见问题(FAQ)

Q1: 如何查看MySQL当前使用的所有选项?

A1: 可以使用以下命令查看MySQL当前使用的所有选项:

bash
mysqladmin variables
# 或在MySQL客户端中执行
SHOW VARIABLES;

Q2: 如何查看MySQL启动时使用的配置文件路径?

A2: 可以使用以下命令查看MySQL启动时使用的配置文件路径:

bash
mysqld --help --verbose | grep -A 10 "Default options"

Q3: 为什么修改了配置文件但选项没有生效?

A3: 可能的原因包括:

  • 配置文件路径不正确
  • 配置项放在了错误的分段中
  • 没有重启MySQL服务
  • 命令行选项覆盖了配置文件设置

Q4: 如何临时修改MySQL选项而不重启服务?

A4: 可以使用SET语句临时修改会话级或全局级选项:

sql
-- 修改会话级选项
SET SESSION sort_buffer_size = 1048576;

-- 修改全局级选项(需要SUPER权限)
SET GLOBAL max_connections = 500;

Q5: 如何确定某个选项的默认值?

A5: 可以使用以下命令查看选项的默认值:

bash
mysqld --help --verbose | grep "^  --option-name"
# 或在MySQL客户端中执行
SHOW VARIABLES LIKE 'option_name';

Q6: 哪些选项需要重启MySQL服务才能生效?

A6: 大多数服务器级选项需要重启服务才能生效,特别是与内存分配、网络配置相关的选项。可以通过查看MySQL文档或使用SHOW VARIABLES命令查看选项是否可动态修改。

Q7: 如何在不同环境中使用不同的配置文件?

A7: 可以使用--defaults-file选项指定使用特定的配置文件:

bash
mysqld --defaults-file=/path/to/my-custom.cnf

Q8: 如何优化MySQL连接数设置?

A8: 优化MySQL连接数设置需要考虑:

  • 服务器内存大小
  • 每个连接的内存消耗
  • 应用程序的并发需求
  • 系统的文件描述符限制

一般来说,最大连接数不应超过服务器能处理的范围,建议根据实际负载进行测试调整。