在 CentOS 7 上配置 MySQL 3406 端口实例
要在同一台服务器上运行另一个 MySQL 实例(3406 端口),需要创建独立的配置文件、数据目录和服务文件。以下是详细步骤:
0.环境
操作系统:CentOS 7
MySQL:5.7.36
1. 创建必要的目录
首先为新实例创建独立的数据和日志目录:
# 创建数据目录
mkdir -p /data/mysql3406
# 创建日志目录
mkdir -p /data/log/mysql3406
# 设置权限
chown -R mysql:mysql /data/mysql3406
chown -R mysql:mysql /data/log/mysql3406
2. 创建新的配置文件
复制并修改原配置文件:
cp /etc/my.cnf /etc/my3406.cnf
编辑新配置文件/etc/my3406.cnf,内容如下:
[mysqld]
port = 3406
socket = /data/mysql3406/run/mysqld.sock
user = mysql
log_bin_trust_function_creators = 1
datadir = /data/mysql3406
pid-file = /data/mysql3406/run/mysqld.pid
skip_ssl
log-error = /data/log/mysql3406/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/log/mysql3406/mysql-slow.log
lower_case_table_names=1
skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 1024M
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 8K
read_buffer_size = 768K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 16
query_cache_size = 16M
query_cache_type = 1
tmp_table_size = 32M
performance_schema_max_table_instances = 1000
explicit_defaults_for_timestamp = true
max_connections = 5000
max_connect_errors = 1000
open_files_limit = 65535
log-bin = mysql3406-bin
binlog_format=row
expire_logs_days = 10
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server=utf8
collation-server=utf8_general_ci
server-id = 2 # 必须与原实例不同
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
default-character-set = utf8
socket = /data/mysql3406/run/mysqld.sock
no-auto-rehash
[mysql.server]
default-character-set = utf8
socket = /data/mysql3406/run/mysqld.sock
[mysqld_safe]
log-error=/data/log/mysql3406/mysqld.log
pid-file=/data/mysql3406/run/mysqld.pid
socket = /data/mysql3406/run/mysqld.sock
default-character-set = utf8
[client]
default-character-set = utf8
socket = /data/mysql3406/run/mysqld.sock
3. 创建新的 systemd 服务文件
复制并修改服务文件:
cp /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld3406.service
编辑新服务文件/usr/lib/systemd/system/mysqld3406.service:
[Unit]
Description=MySQL Server (3406)
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/data/mysql3406/run/mysqld.pid
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables
ExecStartPre=/usr/bin/mysqld_pre_systemd
# Start main service - 指定新的配置文件
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my3406.cnf --daemonize --pid-file=/data/mysql3406/run/mysqld.pid $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
4. 初始化新的 MySQL 实例
# 初始化数据库(注意要保证datadir目录下为空,否则报错)
mysqld --defaults-file=/etc/my3406.cnf --initialize --user=mysql
# 查看初始密码
grep 'temporary password' /data/log/mysql3406/mysql-error.log
# 创建run目录
mkdir -p /data/mysql3406/run
# 设置权限
chown -R mysql:mysql /data/mysql3406/run
5. 启动并设置开机启动
# 重新加载systemd配置
systemctl daemon-reload
# 启动新实例
systemctl start mysqld3406
# 设置开机启动
systemctl enable mysqld3406
# 检查状态
systemctl status mysqld3406
6. 登录新实例并修改密码
# 使用初始密码登录(注意此处使用-S指定套接字,否则可能会连接到3306实例)
mysql -u root -P 3406 -S /data/mysql3406/run/mysqld.sock -p
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';
FLUSH PRIVILEGES;
现在你应该有两个 MySQL 实例在运行:一个在 3306 端口,另一个在 3406 端口,它们各自有独立的数据目录和配置。