-
下载mysql5.6.49源码,选source code和generic linux的。
- 安装编译需要的包,之前源码编译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('你的密码');
网友评论