使用mysqld_multi管理mysql的单机多实例

  • 下载mysql5.6.49源码,选source code和generic linux的。


    使用mysqld_multi管理mysql的单机多实例_第1张图片
  • 安装编译需要的包,之前源码编译redis的时候,已经安装了Development Tools,但是mysql还需要额外的一些包,下面这条命令中有些包已经安过就不会安装了
yum -y install make bison-devel ncures-devel libaio perl-Data-Dumper net-tools bison bison-devel gcc-c++ cmake ncurses ncurses-devel
  • 现在的mysql源码已经不通过./configure配置了,都用cmake配置,进入源码目录执行:

事先在/usr/local/mysql-5.6.40下创建3306、3307文件夹,存放两个实例的数据文件

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.40 \
-DMYSQL_DATADIR=/usr/local/mysql-5.6.40/3306 \
-DSYSCONFDIR=/usr/local/mysql-5.6.40 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.40/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

# 参数含义:
# -DCMAKE_INSTALL_PREFIX=                   \    #安装路径  
# -DMYSQL_DATADIR=                          \    #默认数据文件存放位置  
# -DSYSCONFDIR=                             \    #默认my.cnf路径  
# -DWITH_MYISAM_STORAGE_ENGINE=1            \    #支持MyIASM引擎  
# -DWITH_INNOBASE_STORAGE_ENGINE=1          \    #支持InnoDB引擎  
# -DWITH_MEMORY_STORAGE_ENGINE=1            \    #支持Memory引擎  
# -DWITH_READLINE=1                         \    #快捷键功能(我没用过)  
# -DMYSQL_UNIX_ADDR=                        \    #默认连接数据库socket路径  
# -DMYSQL_TCP_PORT=3306                     \    #默认端口  
# -DENABLED_LOCAL_INFILE=1                  \    #允许从本地导入数据  
# -DWITH_PARTITION_STORAGE_ENGINE=1         \    #安装支持数据库分区  
# -DEXTRA_CHARSETS=all                      \    #安装所有的字符集  
# -DDEFAULT_CHARSET=utf8                    \    #默认字符  
# -DDEFAULT_COLLATION=utf8_general_ci  
  • make && make install,漫长的等待,安装完成后将/usr/local/mysql-5.6.40/bin加入PATH
  • 初始化两个实例的数据文件
./scripts/mysql_install_db --basedir=/usr/local/mysql-5.6.40 --datadir=/usr/local/mysql-5.6.40/3306 --user=mysql
./scripts/mysql_install_db --basedir=/usr/local/mysql-5.6.40 --datadir=/usr/local/mysql-5.6.40/3307 --user=mysql
  • 将support-files/my-default.cnf复制一份并改名为my.cnf到安装目录下,修改内容:

按照官网文档的配置是有问题的,官网里用password=root来指定root用户的密码,这样没法通过mysqld_multi stop关闭mysql实例,这是mysql的bug,15年就有人提出来了,现在也没修复,最后一条评论指出了用pass代替password的办法,具体可以来看mysql的bugs home。但是问题不大,就算用不了mysqls_multi控制多实例的关闭,可以一个一个关mysqladmin -u root shutdown -S 3306/mysql.sock -proot

[mysqld_multi]
mysqld = /usr/local/mysql-5.6.40/bin/mysqld_safe
mysqladmin = /usr/local/mysql-5.6.40/bin/mysqladmin
user = root
pass=root
log=/usr/local/mysql-5.6.40/mysql_multi.log 

[mysqld1]
basedir = /usr/local/mysql-5.6.40
datadir = /usr/local/mysql-5.6.40/3306
port = 3306
# server_id = .....
socket = /usr/local/mysql-5.6.40/3306/mysql.sock
pid-file = /usr/local/mysql-5.6.40/3306/mysql.pid
log_error = /usr/local/mysql-5.6.40/3306/error.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
character_set_server=utf8mb4
# 下面这三个参数mysql5.6默认很好,启动会占400m内存,对我的2g腾讯云压力太大了,设置成这样内存只占70m,而且网站流量不大,也够用了
performance_schema_max_table_instances=600
table_definition_cache=400
table_open_cache=256
[mysqld2]
basedir =  /usr/local/mysql-5.6.40
datadir = /usr/local/mysql-5.6.40/3307
port = 3307
# server_id = .....
socket = /usr/local/mysql-5.6.40/3307/mysql.sock
pid-file = /usr/local/mysql-5.6.40/3307/mysql.pid
log_error = /usr/local/mysql-5.6.40/3307/error.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character_set_server=utf8mb4
performance_schema_max_table_instances=600
table_definition_cache=400
table_open_cache=256
  • 启动、关闭、查看状态
mysqld_multi start/stop/report 1,2
  • 成功启动之后要修改root的密码,登录的时候需要指定使用的sock文件
# 刚安完的mysql没有密码,直接回车就行
mysql -uroot -proot -S 3306/mysql.sock
# 登陆后设置root的密码
set password=password('你的密码');

你可能感兴趣的:(使用mysqld_multi管理mysql的单机多实例)