今天要在服务器上运行多个 MySQL,用不同的端口,彼此隔离数据。
我最先想到的办法是下源码,编译多份,编译的时候设置不同的默认路径、端口和 my.cnf 配置文件位置。
被同事劝止……
人家告诉我不用装多份,只装一份二进制 rpm 版本,然后 copy 多份配置文件,再用不同的命令行参数启动即可。
/usr/sbin/mysqld --user=mysql --skip-external-locking \ --port=3316 --defaults-file=/etc/my.s1.cnf \ --basedir=/ --datadir=/var/lib/mysql_s1/ \ --pid-file=/var/lib/mysql/s1.pid \ --socket=/var/lib/s1.sock & /usr/sbin/mysqld --user=mysql --skip-external-locking \ --port=3326 --defaults-file=/etc/my.s2.cnf \ --basedir=/ --datadir=/var/lib/mysql_s2/ \ --pid-file=/var/lib/mysql/s2.pid \ --socket=/var/lib/s2.sock &
就这么简单!
我曾经用原有的想法,编译过多份 MySQL!
笨死算了~~
顺便说下 –skip-external-locking 这个参数,由此也可引出另一种方式。
MySQL 支持 multi 方式运行多个实例,在 my.cnf 中,每个 [mysql#] 段代表一个实例,# 替换为正整数即可。
看手册的意思,好像是说多个实例可以共用相同的数据目录,还未证实。
但 –skip-external-locking 的说明是,当用 multi 方式启动多个 mysqld server ,多个 server 对同一个 table 进行读写时会锁表。如果你不会同时读写同一张表,那么可以加上这个参数启动 MySQL。
也许可以提高性能吧,回头有空了测试下~