在实际开发或测试环境中,经常需要在一台机器上同时运行多个MySQL 5.7数据库。可能是为了隔离不同项目的数据,也可能是为了进行版本兼容性测试。很多人以为必须安装不同的主版本号才能实现隔离,其实完全不需要。通过配置不同的端口、数据目录和配置文件,我们可以在同一台服务器上轻松跑起多个独立的MySQL 5.7实例。
准备工作与环境检查
开始前先确认系统环境。推荐使用CentOS 7、Ubuntu 18.04或更高版本的Linux系统。确保系统已经安装了基础的软件包管理工具和常用依赖库。关闭防火墙或提前开放所需端口是后续顺利通信的关键。另外,提前规划好两个实例的端口号,比如第一个用默认的3306,第二个自定义为3307。数据目录分别放在/home/mysql_57_1和/home/mysql_57_2下,避免文件冲突。磁盘空间至少预留20GB以上,用于存放二进制日志、索引和数据文件。
创建独立的用户与目录结构
不要共用同一个系统用户来运行多个数据库实例,这样容易引发权限混乱。使用命令groupadd mysql建立专用组,再用useradd -g mysql -s /sbin/nologin mysql创建不可登录的系统账号。接着在目标路径下mkdir -p创建两个数据文件夹,并将属主改为mysql:mysql。给这两个目录分配750权限,确保只有mysql用户能读写,提升安全性。这一步看似繁琐,但能有效防止后续启动时出现权限报错。
编写第一个实例的配置文件
打开文本编辑器,新建my1.cnf文件。在[mysqld]段落中设置datadir=/home/mysql_57_1,port=3306,socket=/tmp/mysql_57_1.sock。加上log_error=/var/log/mysql_57_1.err记录错误日志,pid_file=/var/run/mysqld/mysqld_57_1.pid保存进程ID。如果需要调整内存占用,可以设置innodb_buffer_pool_size=256M。保存后,将文件复制到/etc/my1.cnf。这个配置文件就是第一个实例的运行蓝图,所有参数都围绕它生效。
初始化并启动第一个实例
使用mysql_install_db或mysqld --initialize命令对数据进行初始化。注意加上--user=mysql和--defaults-file=/etc/my1.cnf参数,指定使用刚写的配置文件。初始化完成后,启动服务。可以用systemctl start命令配合自定义的service文件,或者直接执行mysqld_safe --defaults-file=/etc/my1.cnf --user=mysql &。启动后输入netstat -tlnp查看3306端口是否处于监听状态,确认实例已正常上线。
复制模板并修改第二个实例配置
把第一个实例的配置复制一份,重命名为my2.cnf。打开文件,将所有涉及路径的地方替换为第二个实例的路径。datadir改为/home/mysql_57_2,port改为3307,socket改为/tmp/mysql_57_2.sock,日志和PID文件路径同步更新。内存参数可以根据剩余资源适当调大或调小。保存后,同样放置到/etc目录下。此时两个实例的配置文件已经区分开来,互不干扰。
初始化第二个实例并完成启动
再次执行初始化命令,这次指向my2.cnf。路径和参数保持与第一步一致,只是配置文件名变了。初始化成功后,以相同方式启动第二个实例。启动后务必检查3307端口是否打开。如果两个实例都在运行,可以使用mysql -u root -p -P 3307 -S /tmp/mysql_57_2.sock的方式分别连接。建议为每个实例设置独立的root密码或创建专用业务账号,防止误操作交叉影响。
客户端连接与日常管理
多实例运行后,维护工作会稍微复杂一些。查看状态时记得带上对应的配置文件路径或sock文件。如果某个实例无法启动,优先检查对应端口是否被占用,再查看error_log里是否有表空间损坏或内存不足的提示。定期清理慢查询日志和二进制日志,避免磁盘爆满。备份脚本也要分开写,按实例名称区分文件名。掌握这些细节后,多版本MySQL 5.7的共存就能稳定运行,满足各种开发与测试需求。



