java后端集群化专题

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

2018-05-06  本文已影响7人  江江的大猪
yum -y install make bison-devel ncures-devel libaio perl-Data-Dumper net-tools bison bison-devel gcc-c++ cmake ncurses ncurses-devel

事先在/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  
./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

按照官网文档的配置是有问题的,官网里用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
# 刚安完的mysql没有密码,直接回车就行
mysql -uroot -proot -S 3306/mysql.sock
# 登陆后设置root的密码
set password=password('你的密码');
上一篇 下一篇

猜你喜欢

热点阅读