以Linux环境使用包管理器安装的8.0为例,新加配置同理
创建数据目录
默认数据目录在/var/lib/mysql,用户归属和权限已经属于mysql
在该目录下保存多开的数据目录可以避免一系列奇怪的权限问题,但使用root或其他用户创建的子目录需要手动修改给mysql
# 在目录下创建一个instances目录、和多开的数据目录
sudo mkdir -p /var/lib/mysql/instances/2-3307
# 修改两个子目录的用户归属和权限
sudo chown mysql:mysql /var/lib/mysql/instances
sudo chmod 750 /var/lib/mysql/instances
sudo chown mysql:mysql /var/lib/mysql/instances/2-3307
sudo chmod 750 /var/lib/mysql/instances/2-3307复制配置文件
复制一个配置文件
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql-2-3307.cnf参考如下配置,重点修改:端口port,数据目录datadir 、socket 、pid-file,唯一IDserver-id,日志路径log_error、slow_query_log_file,可以只参照这几条配置进行修改
注意这里的内存配置比较大,如果要复制全部内容可以丢给AI修改成合适的参数
[mysqld]
# -------------------
# 基础设置
# -------------------
port = 3307
datadir = /var/lib/mysql/instances/2-3307
socket = /var/run/mysqld/mysqld-2-3307.sock
pid-file = /var/run/mysqld/mysqld-2-3307.pid
user = mysql
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
default_storage_engine = InnoDB
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-name-resolve = 1
# ===== 唯一ID(如果开启binlog必须)=====
server-id = 2
# MyISAM
key_buffer_size = 16M
myisam-recover-options = BACKUP
# -------------------
# InnoDB 内存与性能优化
# -------------------
innodb_buffer_pool_size = 16G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# 临时表 / 大查询优化
tmp_table_size = 256M
max_heap_table_size = 256M
sort_buffer_size = 1M
join_buffer_size = 1M
performance_schema = OFF
innodb_thread_concurrency = 0
innodb_read_io_threads = 8
innodb_write_io_threads = 8
# -------------------
# 连接与线程
# -------------------
max_connections = 1024
thread_cache_size = 512
table_open_cache = 10000
# -------------------
# 二进制日志
# -------------------
binlog_format = ROW
max_binlog_size = 100M
sync_binlog = 0
# -------------------
# 日志与监控
# -------------------
log_error = /var/log/mysql/error-2-3307.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-2-3307.log
long_query_time = 2
log_queries_not_using_indexes = 1
修改mysqld数据权限
MySQL使用了AppArmor安全模块来严格限制数据权限,需要给新配置的文件添加权限,使用编辑工具修改文件/etc/apparmor.d/usr.sbin.mysqld
在文件末尾的}前面追加
# ========== 自定义 MySQL 多实例支持 (ID 2, 端口 3307) ==========
# Socket 和锁文件
/var/run/mysqld/mysqld-2-3307.sock rw,
/var/run/mysqld/mysqld-2-3307.sock.lock rw,
/run/mysqld/mysqld-2-3307.sock rw,
/run/mysqld/mysqld-2-3307.sock.lock rw,
# PID 文件
/var/run/mysqld/mysqld-2-3307.pid rw,
/run/mysqld/mysqld-2-3307.pid rw,
# 日志文件
/var/log/mysql/error-2-3307.log rw,
/var/log/mysql/mysql-2-3307.log rw,重载策略
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld初始化数据目录
指定使用mysql用户初始化到/var/lib/mysql/instances/2-3307
sudo mysqld --initialize-insecure \
--user=mysql \
--basedir=/usr \
--datadir=/var/lib/mysql/instances/2-3307这里附带的参数-insecure是指创建无密码的实例,密码稍后修改,如果输出空白内容说明成功了
复制Service配置
复制service文件
sudo cp /lib/systemd/system/mysql.service /lib/systemd/system/mysql-2-3307.service编辑/lib/systemd/system/mysql-2-3307.service文件,修改ExecStart部分
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql/mysql-2-3307.cnf启动服务
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启动新实例
sudo systemctl start mysql-2-3307
# 查看状态
sudo systemctl status mysql-2-3307如果没问题,设置开机自启
sudo systemctl enable mysql-2-3307连接数据库修改密码
通过socket文件连接
sudo mysql -S /var/run/mysqld/mysqld-2-3307.sock -u root修改YourNewPassword为新的密码并更新
CREATE USER 'root'@'%' IDENTIFIED BY 'YourNewPassword';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 修改完成,退出
exit如果要外网访问且设置了防火墙,需要开放对应的
3307端口