查了下网上的操作方式,虽然都是启动多个mysql socket但是配置略有区别,网上都是用mysqld_multi这个命令在my.cnf下配置,而我们这里的方式是直接在启动mysqld时指定不同的cnf,启动多个Mysqld,可能意思是一样的。

不过以下方法在ubuntu下尝试失败,在redhat9下确成功,暂时没找到问题,估计是 ubuntu启动MYSQL时设置的进程不太一样,我这里总提示写进程文件时冲突。

redhat9的mysql是rmp安装的。

将/var/lib/mysql/下的mysql目录(包含了mysql的基础数据库表)copy到其他目录,这里是 /home/mysql/mysql3304/mysql下(不要在copy到/var/lib/mysql下,这样mysql在启动时会认为有一个叫 3304的数据库存在)

在mysql3304下建立3304.cnf 内容如下:

[mysqld]
datadir=/home/mysql/mysql3304 #复制出来的数据库目录
port=3304
socket=/tmp/mysql3304.sock #端口号的socket地址

set-variable = max_connections=500

set-variable = key_buffer=256M
set-variable = max_allowed_packet=5M
set-variable = table_cache=500
set-variable = sort_buffer=8M
set-variable = record_buffer=8M
set-variable = myisam_sort_buffer_size=64M
set-variable = thread_cache=8
set-variable = connect_timeout=20
set-variable = thread_concurrency=2

log-bin
server-id=1

将所有文件权限修改为mysql组,否则会出现启动时进程不能写入文件的错误。

启动时输入 safe_mysqld –defaults-file=/home/mysql/mysql3304/3304.cnf

该端口的进程就启动了,在访问该数据库时输入mysql -u root -p -S /tmp/mysql3304.sock,密码同最原始的Mysql数据库密码一样。

如果需要在建立其他端口号的数据库,继续上面的操作,如果copy的是3304这个目录的话,一定要将pid文件删除,包含了当前的进程号,肯定会有冲突。

如果在服务器启动时开启多个mysql,在/etc/rc.local下增加 safe_mysqld–defaults-file=/home/mysql/mysql3304/3304.cnf &