千家信息网

MySQL5.5多实例编译安装——多配置文件

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,一、什么是MySQL多实例?MySQL多实例简单的说就是在一台服务器上安装一套MySQL程序,通过不同的端口对外提供访问,多实例不仅节省物理主机成本,还有效提升了单台物理主机的CPU、磁盘I/O使用效
千家信息网最后更新 2025年01月24日MySQL5.5多实例编译安装——多配置文件

一、什么是MySQL多实例?
MySQL多实例简单的说就是在一台服务器上安装一套MySQL程序,通过不同的端口对外提供访问,多实例不仅节省物理主机成本,还有效提升了单台物理主机的CPU、磁盘I/O使用效率,而且还可以在多实例之间做部署数据库HA方案。
二、如何配置MySQL多实例?
配置mysql多实例有两种方式
1、根据官方提供的是通过mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理。
2、使用多个配置文件和启动文件,配置文件之间的区别:server-id、socket文件的位置、配置路径和数据存放位置不同。初始化的时候只用不同的配置文件进行初始化数据库,启动时使用不同的启动文件来启动,这种方法逻辑和配置简单,但是不方便管理。
下面我们以第二种多实例的方法进行配置
三、多实例配置
MySQL安装的是mysql5.5.52版本,安装方法请看MySQL5.5.52编译安装
1、停止单实例mysql数据库

[root@db01 ~]# /etc/init.d/mysqld stopShutting down MySQL. SUCCESS!

2、禁止开机自启动

[root@db01 ~]# chkconfig mysqld off[root@db01 ~]# chkconfig --list mysqldmysqld          0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭6:关闭

3、创建多实例根目录/data/目录

[root@db01 ~]# mkdir -p /data/{3306,3307}/data

需要特别说明一下,在多实例启动文件中,启动MySQL不同势力服务所需要执行的命令实质是有区别的,例如,启动3306实例命令如下

mysql_safe --defaults-file=/data/3306/mysql &>/dev/null

启动3307实例的命令如下:

mysql_safe --defaults-file=/data/3307/mysql &>/dev/null

下面看看多实例启动文件中,停止MySQL不同实例服务的实质命令
停止3306实例的命令如下:

mysqladmin -uroot -p123456 -S /data/3306/mysql.sock shutdown

停止3307实例的命令如下:

mysqladmin -uroot -p123456 -S /data/3307/mysql.sock shutdown

4、创建MySQL多实例的配置文件和启动文件
1)3306mysql实例配置文件

[root@db01 ~]# vim /data/3306/my.cnf[client]port            = 3306socket          = /data/3306/mysql.sock[mysql]no-auto-rehash[mysqld]user    = mysqlport    = 3306socket  = /data/3306/mysql.sockbasedir = /application/mysqldatadir = /data/3306/dataopen_files_limit    = 1024back_log = 600max_connections = 800max_connect_errors = 3000table_cache = 614external-locking = FALSEmax_allowed_packet =8Msort_buffer_size = 1Mjoin_buffer_size = 1Mthread_cache_size = 100thread_concurrency = 2query_cache_size = 2Mquery_cache_limit = 1Mquery_cache_min_res_unit = 2k#default_table_type = InnoDBthread_stack = 192K#transaction_isolation = READ-COMMITTEDtmp_table_size = 2Mmax_heap_table_size = 2Mlong_query_time = 1#log_long_format#log-error = /data/3306/error.log#log-slow-queries = /data/3306/slow.logpid-file = /data/3306/mysql.pidlog-bin = /data/3306/mysql-binrelay-log = /data/3306/relay-binrelay-log-info-file = /data/3306/relay-log.infobinlog_cache_size = 1Mmax_binlog_cache_size = 1Mmax_binlog_size = 2Mexpire_logs_days = 7key_buffer_size = 16Mread_buffer_size = 1Mread_rnd_buffer_size = 1Mbulk_insert_buffer_size = 1M#myisam_sort_buffer_size = 1M#myisam_max_sort_file_size = 10G#myisam_max_extra_sort_file_size = 10G#myisam_repair_threads = 1#myisam_recoverlower_case_table_names = 1skip-name-resolveslave-skip-errors = 1032,1062replicate-ignore-db=mysqlserver-id = 1innodb_additional_mem_pool_size = 4Minnodb_buffer_pool_size = 32Minnodb_data_file_path = ibdata1:128M:autoextendinnodb_file_io_threads = 4innodb_thread_concurrency = 8innodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 2Minnodb_log_file_size = 4Minnodb_log_files_in_group = 3innodb_max_dirty_pages_pct = 90innodb_lock_wait_timeout = 120innodb_file_per_table = 0[mysqldump]quickmax_allowed_packet = 2M[mysqld_safe]log-error=/data/3306/mysql_3306.errpid-file=/data/3306/mysqld.pid

2)3307mysql实例配置文件

[root@db01 ~]# cp /data/3306/my.cnf /data/3307/my.cnf[root@db01 ~]# sed -i 's#3306#3307#g' /data/3307/my.cnf[root@db01 ~]# sed -n /server-id/p /data/3307/my.cnfserver-id = 1[root@db01 ~]# sed -i 's#server-id = 1#server-id = 2#g' /data/3307/my.cnf                       [root@db01 ~]# cat /data/3307/my.cnf[client]port            = 3307socket          = /data/3307/mysql.sock[mysql]no-auto-rehash[mysqld]user    = mysqlport    = 3307socket  = /data/3307/mysql.sockbasedir = /application/mysqldatadir = /data/3307/dataopen_files_limit    = 1024back_log = 600max_connections = 800max_connect_errors = 3000table_cache = 614external-locking = FALSEmax_allowed_packet =8Msort_buffer_size = 1Mjoin_buffer_size = 1Mthread_cache_size = 100thread_concurrency = 2query_cache_size = 2Mquery_cache_limit = 1Mquery_cache_min_res_unit = 2k#default_table_type = InnoDBthread_stack = 192K#transaction_isolation = READ-COMMITTEDtmp_table_size = 2Mmax_heap_table_size = 2Mlong_query_time = 1#log_long_format#log-error = /data/3307/error.log#log-slow-queries = /data/3307/slow.logpid-file = /data/3307/mysql.pidlog-bin = /data/3307/mysql-binrelay-log = /data/3307/relay-binrelay-log-info-file = /data/3307/relay-log.infobinlog_cache_size = 1Mmax_binlog_cache_size = 1Mmax_binlog_size = 2Mexpire_logs_days = 7key_buffer_size = 16Mread_buffer_size = 1Mread_rnd_buffer_size = 1Mbulk_insert_buffer_size = 1M#myisam_sort_buffer_size = 1M#myisam_max_sort_file_size = 10G#myisam_max_extra_sort_file_size = 10G#myisam_repair_threads = 1#myisam_recoverlower_case_table_names = 1skip-name-resolveslave-skip-errors = 1032,1062replicate-ignore-db=mysqlserver-id = 2innodb_additional_mem_pool_size = 4Minnodb_buffer_pool_size = 32Minnodb_data_file_path = ibdata1:128M:autoextendinnodb_file_io_threads = 4innodb_thread_concurrency = 8innodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 2Minnodb_log_file_size = 4Minnodb_log_files_in_group = 3innodb_max_dirty_pages_pct = 90innodb_lock_wait_timeout = 120innodb_file_per_table = 0[mysqldump]quickmax_allowed_packet = 2M[mysqld_safe]log-error=/data/3307/mysql_3307.errpid-file=/data/3307/mysqld.pid

5、MySQL多实例启动文件的创建和配置文件创建几乎一样,也可以通过vim命令来添加如下:
1)3306mysql实例启动文件

[root@db01 ~]# vim /data/3306/mysql#!/bin/bash################################################# Filename:mysql# Description:Start MySQL multi instance script# Version:1.0# Date:2016/12/10# Author:xuanwiei# Email:1756112532@qq.com#################################################initport=3306mysql_user="root"mysql_pwd="123456"  #这里将来是要修改为和数据库密码一致CmdPath="/application/mysql/bin"mysql_sock="/data/${port}/mysql.sock"#startup functionfunction_start_mysql(){    if [ ! -e "$mysql_sock" ];then      printf "Starting MySQL...\n"      /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &    else      printf "MySQL is running...\n"      exit    fi}#stop functionfunction_stop_mysql(){    if [ ! -e "$mysql_sock" ];then       printf "MySQL is stopped...\n"       exit    else       printf "Stoping MySQL...\n"       ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown   fi}#restart functionfunction_restart_mysql(){    printf "Restarting MySQL...\n"    function_stop_mysql    sleep 2    function_start_mysql}case $1 instart)    function_start_mysql;;stop)    function_stop_mysql;;restart)    function_restart_mysql;;*)    printf "Usage: /data/${port}/mysql {start|stop|restart}\n"esac

2)3307mysql实例启动文件

[root@db01 ~]# cp /data/3306/mysql /data/3307/mysql[root@db01 ~]# sed -i 's#3306#3307#g' /data/3307/mysql [root@db01 ~]# cat /data/3307/mysql#!/bin/bash################################################# Filename:    mysql# Description: Start MySQL multi instance script# Version:     1.0# Date:        2016/12/10# Author:      xuanwiei# Email:       1756112532@qq.com#################################################initport=3307mysql_user="root"mysql_pwd="123456"CmdPath="/application/mysql/bin"mysql_sock="/data/${port}/mysql.sock"#startup functionfunction_start_mysql(){    if [ ! -e "$mysql_sock" ];then      printf "Starting MySQL...\n"      /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &    else      printf "MySQL is running...\n"      exit    fi}#stop functionfunction_stop_mysql(){    if [ ! -e "$mysql_sock" ];then       printf "MySQL is stopped...\n"       exit    else       printf "Stoping MySQL...\n"       ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown   fi}#restart functionfunction_restart_mysql(){    printf "Restarting MySQL...\n"    function_stop_mysql    sleep 2    function_start_mysql}case $1 instart)    function_start_mysql;;stop)    function_stop_mysql;;restart)    function_restart_mysql;;*)    printf "Usage: /data/${port}/mysql {start|stop|restart}\n"esac

6、配置MySQL多实例的文件权限
(1)通过下面的命令授权mysql用户和用户组管理整个多实例的根目录/data

[root@db01 ~]# chown -R mysql.mysql /data

(2)通过下面的mysql多实例所有启动文件的mysql可执行,设置700权限最佳,注意不要用755权限,因为文件里有数据库管理员密码,会被读取到。

[root@db01 scripts]# find /data/ -type f -name "mysql"/data/3306/mysql/data/3307/mysql[root@db01 scripts]# find /data/ -type f -name "mysql"|xargs chmod 700[root@db01 scripts]# find /data/ -type f -name "mysql"|xargs ls -l-rwx------ 1 root root 1359 12月 10 16:20 /data/3306/mysql-rwx------ 1 root root 1359 12月 10 16:22 /data/3307/mysql

7、初始化MySQL多实例的数据库文件
(1)初始化MySQL数据库
cd /application/mysql/scripts/ <==注意和MySQL5.1的路径不同,MySQL5.1不在MySQL bin路径下了
3306实例
/application/mysql/scripts/mysql_install_db \
--basedir=/application/mysql \
--datadir=/data/3306/data \
--user=mysql
3307实例
/application/mysql/scripts/mysql_install_db \
--basedir=/application/mysql \
--datadir=/data/3307/data \
--user=mysql
提示:--basedir=/application/mysql为MySQL的安装路径,--datadir为不同的实例数据目录
操作过程:

[root@db01 ~]# cd /application/mysql/scripts/ [root@db01 scripts]# /application/mysql/scripts/mysql_install_db \> --basedir=/application/mysql \> --datadir=/data/3306/data \> --user=mysqlWARNING: The host 'db01' could not be looked up with resolveip.This probably means that your libc libraries are not 100 % compatiblewith this binary MySQL version. The MySQL daemon, mysqld, should worknormally with the exception that host name resolving will not work.This means that you should use IP addresses instead of hostnameswhen specifying MySQL privileges !Installing MySQL system tables...161117 14:14:14 [Note] /application/mysql/bin/mysqld (mysqld 5.5.52) starting as process 46676 ...OKFilling help tables...161117 14:14:15 [Note] /application/mysql/bin/mysqld (mysqld 5.5.52) starting as process 46683 ...OK

如果有两个ok,就表示初始化成功
其中WARNING: The host 'db01' could not be looked up with resolveip.
原因是因为db01没有在hosts文件中解析
解决:echo "172.16.1.52 db01" >>/etc/hosts

[root@db01 scripts]# /application/mysql/scripts/mysql_install_db \> --basedir=/application/mysql \> --datadir=/data/3307/data \> --user=mysqlInstalling MySQL system tables...161117 14:18:20 [Note] /application/mysql/bin/mysqld (mysqld 5.5.52) starting as process 46733 ...OKFilling help tables...161117 14:18:21 [Note] /application/mysql/bin/mysqld (mysqld 5.5.52) starting as process 46740 ...OK

如果有两个ok,就表示初始化成功
这次没用出现WARNING: The host 'db01' could not be looked up with resolveip.
(2)初始化数据库的原理及结果

[root@db01 scripts]# tree /data/data├── 3306│   ├── data│   │   ├── mysql│   │   │   ├── columns_priv.frm│   │   │   ├── columns_priv.MYD│   │   │   ├── columns_priv.MYI│   │   │   ├── db.frm│   │   │   ├── db.MYD│   │   │   ├── db.MYI│   │   │   ├── event.frm│   │   │   ├── event.MYD│   │   │   ├── event.MYI│   │   │   ├── func.frm│   │   │   ├── func.MYD│   │   │   ├── func.MYI…………………省略部分………………………………

(3)初始化故障
示例1:给出了警告信息"WARNING: The host 'db01' could not be looked up with resolveip."
这个警告信息可以忽略,如果非要解决则需修改主机名解析

echo "172.16.1.52     db01" >>/etc/hosts

8、启动MySQL多实例数据库
第一个实例3306的启动命令
/data/3306/mysql start
第二个实例3307的启动命令
/data/3307/mysql start
现在检查MySQL多实例数据库是否成功启动
netstat -lntup|grep 330
操作过程:

[root@db01 scripts]# /data/3306/mysql    Usage: /data/3306/mysql {start|stop|restart}[root@db01 scripts]# /data/3306/mysql startStarting MySQL...[root@db01 scripts]# /data/3307/mysql start Starting MySQL...

查看端口

[root@db01 scripts]# ss -nlutp|grep 330tcp    LISTEN     0      600                    *:3306                  *:*      users:(("mysqld",48766,12))tcp    LISTEN     0      600                    *:3307                  *:*      users:(("mysqld",49510,12))

9、配置及管理MySQL多实例数据库
(1)配置MySQL多实例数据库开机自启动
服务的开机自启动和关键,MySQL多实例的启动也不例外,把MySQL多实例的启动命令加入/etc/rc.local,实现开机自启动:

cat >>/etc/rc.local<

提示:要确保MySQL脚本有执行权限
(2)登陆mysql测试
登录时要指定sock文件
测试命令如下:
mysql -S /data/3306/mysql.sock <==直接敲进来了,而且身份还是root,但是多了-S /data/3306/mysql.sock,用户区别登录不同的实例
操作演示

[root@db01 scripts]# mysql -S /data/3306/mysql.sockWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.5.52-log Source distributionCopyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>[root@db01 3306]# mysql -S /data/3307/mysql.sockWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.5.52-log Source distributionCopyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

到这里MySQL多实例就配置完成啦O(∩_∩)O~~!!!

0