1.下载并安装glibc版本的mysql
通过yum安装的mysql无法实现多实例配置,因此这里使用glibc版本。由于官网不容易找到glibc版本的mysql,建议从下面站点下载:
http://www.360sdn.com/opensource-datasource/2016/0909/8964.html
# wget -c https://dev.mysql.com/get/archives/mysql-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
# tar -zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
# mv mysql-5.7.18-linux-x86_64-glibc2.5 /usr/mysql/mysql-5.7.18
添加环境变量
#vim /etc/profile
添加如下内容
export PATH=/usr/mysql/mysql-5.1.18/bin:$PATH
重新加载配置
#source /etc/profile
2.准备运行环境
下载基础运行库
#yum install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype
freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel
bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5
krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap
openldap-clients openldap-servers
创建账户并且分配权限
mysql不允许通过root用户启动,因此,我们这里使用新用户进行管理mysql
---创建mysql分组
#groupadd mysql
---创建名称为mysql的用户,登录时使用basg,用户信息目录在/usr/mysql,并将该用户加入mysql分组
#useradd -s /bin/bash -d /usr/mysql -g mysql mysql
---设置密码
#passwd mysql
---复制用户信息到用户目录下
#cd /etc/skel
#cp .bashrc /usr/mysql.bashrc
#cp .bash_logout /usr/mysql/.bash_logout
#cp .bash_profile /usr/mysql.bash_profile
---更改目录拥有者
#chown -R mysql:mysql /usr/mysql
---给【mysql组】执行sudo的权限
#vim /etc/sudoers
---添加如下内容
%mysql ALL=(ALL) ALL:ALL
3.创建系统初始化文件
拷贝support-files中的mysql-server到/etc/init.d/目录下
注意拷贝之前需要修改mysqld_multi.server中的为你的安装目录
#cd support-files
#vim mysqld_multi.server
---添加如下内容
basedir=/var/mysql/mysql-5.7.18
bindir=/var/mysql/mysql-5.7.18/bin
---复制到/etc/init.d/目录下
#cp mysqld_multi.server /etc/init.d/mysqld_multi
#cp mysql.server /etc/init.d/mysql
4.创建配置文件
创建数据目录和日志目录
#mkdir -p /usr/mysq/mysql-5.7.18/databases
#chown -R mysql:mysql /usr/mysq/mysql-5.7.18/databases
#chmod 766 mysql:mysql /usr/mysq/mysql-5.7.18/databases
#mkdir -p /usr/mysq/mysql-5.7.18/logs
#chown -R mysql:mysql /usr/mysq/mysql-5.7.18/logs
#chmod 766 mysql:mysql /usr/mysq/mysql-5.7.18/logs
创建my.cnf
#vim /etc/my.cnf
my.cnf配置如下
[mysqld_multi]
mysqld=/usr/mysql/mysql-5.7.18/bin/mysqld_safe
mysqladmin=/usr/mysql/mysql-5.7.18/bin/mysqladmin
log =/usr/mysql/mysql-5.7.18/logs/mysqld_multi.log
user=mysql
password=mysql
[mysqld3306]
port=3306
basedir=/usr/mysql/mysql-5.7.18
datadir=/usr/mysql/mysql-5.7.18/databases/data3306 #数据库目录
socket=/usr/mysql/mysql-5.7.18/logs/mysqld3306.sock #socket连接存根
log-error=/usr/mysql/mysql-5.7.18/logs/error-mysqld3306.log #错误日志
pid-file=/usr/mysql/mysql-5.7.18/logs/mysqld3306.pid #进程文件
language=/usr/mysql/mysql-5.7.18/share/english #使用提示语言,这里目录下必须包含errmsg.sys
max_allowed_packet = 256M
query_cache_size=256M
max_connections=2000
max_connect_errors=10000
key_buffer_size=6000M
read_buffer_size=32M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size=512M
tmp_table_size=1024M
sort_buffer_size=128M
symbolic-links=0
[mysqld3307]
port=3307
basedir=/usr/mysql/mysql-5.7.18
datadir=/usr/mysql/mysql-5.7.18/databases/data3307
socket=/usr/mysql/mysql-5.7.18/logs/mysqld3307.sock
log-error=/usr/mysql/mysql-5.7.188/logs/error-mysqld3307.log
pid-file=/usr/mysql/mysql-5.7.18/logs/mysqld3307.pid
language=/usr/mysql/mysql-5.7.18/share/english
max_allowed_packet = 256M
query_cache_size=256M
max_connections=2000
max_connect_errors=10000
key_buffer_size=6000M
read_buffer_size=32M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size=512M
tmp_table_size=1024M
sort_buffer_size=128M
symbolic-links=0
[mysqld_safe]
log-error=/usr/mysql/mysql-5.7.18/logs/mysqld_safe.log
pid-file=/usr/mysql/mysql-5.7.18/logs/mysqld_safe.pid
[mysqld3308]
port=3308
basedir=/usr/mysql/mysql-5.7.18
datadir=/usr/mysql/mysql-5.7.18/databases/data3308
socket=/usr/mysql/mysql-5.7.18/logs/mysqld3308.sock
log-error=/usr/mysql/mysql-5.7.18/logs/error-mysqld3308.log
pid-file=/usr/mysql/mysql-5.7.18/logs/mysqld3308.pid
language=/usr/mysql/mysql-5.7.18/share/english
max_allowed_packet = 256M
query_cache_size=256M
max_connections=2000
max_connect_errors=10000
key_buffer_size=6000M
read_buffer_size=32M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size=512M
tmp_table_size=1024M
sort_buffer_size=128M
symbolic-links=0
[mysqldump]
quick
max_allowed_packet = 512M
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 512M
sort_buffer_size = 32M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 512M
sort_buffer_size = 32M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
5.初始化数据库实例
---切换到mysql用户
# su - mysql
---进行初始化
$ cd /usr/mysql/mysql-5.7.18/bin
---执行初始化命令
$ ./mysqld --initialize --user=mysql --basedir=/var/mysql/mysql-5.7.18 --datadir=/var/mysql/mysql-5.7.18/databases/data3306
--生成的临时密钥--->D8*>?hmFfGq8
$ ./mysqld --initialize --user=mysql --basedir=/var/mysql/mysql-5.7.18 --datadir=/var/mysql/mysql-5.7.18/databases/data3307
--生成的临时密钥--->jogrlMlka7&X
$ ./mysqld --initialize --user=mysql --basedir=/var/mysql/mysql-5.7.18 --datadir=/var/mysql/mysql-5.7.18/databases/data3308
--生成的临时密钥--->mogr11ka6kl
这个过程可能遇到如下问题的解决办法
Q:./mysqld: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录
#yum install glibc.i686
Q:./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file:
No such file or directory
#yum install libaio libaio-devel
创建日志
日志必须手动创建,系统不会自动创建。此外权限是766,用户是mysql,否则无法启动
---切换到root
$ su - root
#cd /usr/mysq/mysql-5.7.18/logs
--创建日志和进程文件,以3306实例为例
#touch mysqld3306.pid
#touch error-mysqld3306.log
#chmod 766 /usr/mysq/mysql-5.7.18/logs/*
#chown -R mysql:mysql /usr/mysq/mysql-5.7.18/logs/
最终需要创建如下文件
-rwxrwxrwx 1 mysql mysql 0 5月 2 15:45 error-mysqld3306.log
-rwxrwxrwx 1 mysql mysql 1 5月 2 17:23 error-mysqld3307.log
-rwxrwxrwx 1 mysql mysql 1 5月 2 17:24 error-mysqld3308.log
-rwxrwxrwx 1 mysql mysql 0 5月 2 17:22 mysqld3306.pid
-rwxrwxrwx 1 mysql mysql 0 5月 2 17:04 mysqld3307.pid
-rwxrwxrwx 1 mysql mysql 0 5月 2 17:10 mysqld3308.pid
6.启动实例
# su - mysql
$ mysql_multi start 3306
$ mysql_multi start 3307
$ mysql_multi start 3308
如果启动成功,我们可以从如下命令中找到
#su - root
#netstat -lntp -p 4 | grep 330
tcp 0 0 :::3307 :::* LISTEN 27717/mysqld
tcp 0 0 :::3308 :::* LISTEN 25537/mysqld
tcp 0 0 :::3306 :::* LISTEN 27334/mysqld
然后我们登录即可,这里以3306数据库为例
# mysql -h 172.20.11.62 -P 3306 -S /usr/mysql/mysql-5.7.18/logs/mysqld3306.sock -u root -p
注意:首次登录时使用初始化临时密码,然后在数据库中修改为自己的密码
>SET PASSWOR=PASSWORD('admin123');
>flush privileges;
到这里我们基本实现了多实例,至于远程连接,请参考其他网络博客。