时间:2021-07-01 10:21:17 帮助过:14人阅读
一、什么是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 stop Shutting down MySQL. SUCCESS!
2、禁止开机自启动
[root@db01 ~]# chkconfig mysqld off [root@db01 ~]# chkconfig --list mysqld mysqld 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 = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3306 socket = /data/3306/mysql.sock basedir = /application/mysql datadir = /data/3306/data open_files_limit = 1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_cache = 614 external-locking = FALSE max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unit = 2k #default_table_type = InnoDB thread_stack = 192K #transaction_isolation = READ-COMMITTED tmp_table_size = 2M max_heap_table_size = 2M long_query_time = 1 #log_long_format #log-error = /data/3306/error.log #log-slow-queries = /data/3306/slow.log pid-file = /data/3306/mysql.pid log-bin = /data/3306/mysql-bin relay-log = /data/3306/relay-bin relay-log-info-file = /data/3306/relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_size = 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_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_recover lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062 replicate-ignore-db=mysql server-id = 1 innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1:128M:autoextend innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error=/data/3306/mysql_3306.err pid-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.cnf server-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 = 3307 socket = /data/3307/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3307 socket = /data/3307/mysql.sock basedir = /application/mysql datadir = /data/3307/data open_files_limit = 1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_cache = 614 external-locking = FALSE max_allowed_packet =8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unit = 2k #default_table_type = InnoDB thread_stack = 192K #transaction_isolation = READ-COMMITTED tmp_table_size = 2M max_heap_table_size = 2M long_query_time = 1 #log_long_format #log-error = /data/3307/error.log #log-slow-queries = /data/3307/slow.log pid-file = /data/3307/mysql.pid log-bin = /data/3307/mysql-bin relay-log = /data/3307/relay-bin relay-log-info-file = /data/3307/relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_size = 16M read_buffer_size = 1M read_rnd_buffer_size = 1M bulk_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_recover lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062 replicate-ignore-db=mysql server-id = 2 innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1:128M:autoextend innodb_file_io_threads = 4 innodb_thread_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error=/data/3307/mysql_3307.err pid-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 ################################################ #init port=3306 mysql_user="root" mysql_pwd="123456" #这里将来是要修改为和数据库密码一致 CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_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 function function_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 function function_restart_mysql() { printf "Restarting MySQL...\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) 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 ################################################ #init port=3307 mysql_user="root" mysql_pwd="123456" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_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 function function_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 function function_restart_mysql() { printf "Restarting MySQL...\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) 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=mysql WARNING: The host ‘db01‘ could not be looked up with resolveip. This probably means that your libc libraries are not 100 % compatible with this binary MySQL version. The MySQL daemon, mysqld, should work normally with the exception that host name resolving will not work. This means that you should use IP addresses instead of hostnames when specifying MySQL privileges ! Installing MySQL system tables... 161117 14:14:14 [Note] /application/mysql/bin/mysqld (mysqld 5.5.52) starting as process 46676 ... OK Filling 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=mysql Installing MySQL system tables... 161117 14:18:20 [Note] /application/mysql/bin/mysqld (mysqld 5.5.52) starting as process 46733 ... OK Filling 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 start Starting MySQL... [root@db01 scripts]# /data/3307/mysql start Starting MySQL...
查看端口
[root@db01 scripts]# ss -nlutp|grep 330 tcp 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<<EOF #mysql multi instances /data/3306/mysql start /data/3307/mysql start EOF tail -3 /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.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.52-log Source distribution Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql> [root@db01 3306]# mysql -S /data/3307/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.52-log Source distribution Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql>
到这里MySQL多实例就配置完成啦O(∩_∩)O~~!!!
MySQL5.5多实例编译安装——多配置文件
标签:hosts normal except min clear UI cli cache lap