前言:简单的说就是在一台服务器上开启多个不同的服务端口(如:3306,3307),运行多个msyql服务进程,这些服务进程通过不同的 socket监听不同的服务端口来提供各自的服务。这些mysql多实例共用一套mysql安装程序,使用不同(也可以相同)的my.cnf配置文件,启动程序,数据文件。在提供服务时,多实例mysql在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得服务器相关硬件资源多少(cpu,mem,disk)。其实,其它许多服务例如tomcat,Nginx等都可以多实例。
通过配置多个配置文件,多个数据文件及多个启动程序来实现多实例的方案.
一>多实例安装部署
1>删除之前的单实例并创建mysql多实例目录
[root@lll /]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1792 mysql 10u IPv4 21145 0t0 TCP *:mysql (LISTEN)
[root@lll /]# pkill mysqld ------杀死启动底层mysqld
[root@lll /]# lsof -i:3306
[root@lll /]# ps -ef|grep mysql
root 7651 2720 0 22:17 pts/0 00:00:00 grep --color=auto mysql
[root@lll /]# rm -f /etc/init.d/mysqld
[root@lll /]# mkdir -p /data/{3306,3307}/data -----创建mysql多实例目录
[root@lll /]#
[root@lll /]# tree /data/
/data/ -----总的多实例根目录
|-- 3306 ------3306实例的目录
| `-- data ------3306实例的数据文件的目录
`-- 3307 ------3307实例的目录
`-- data ------3307实例的数据文件的目录
4 directories, 0 files
2>创建mysql多实例的配置文件
[root@lll data]# tree
.
|-- 3306
| |-- data
| |-- my.cnf
| `-- mysql
`-- 3307
|-- data
|-- my.cnf
`-- mysql
4 directories, 4 files
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_oldboy3306.err -----日志文件
pid-file=/data/3306/mysqld.pid
3>mysql多实例启动服务实质:
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &
mysql多实例停止服务实质:
mysqladmin -u root(用户名) -密码 -S /data/3306/mysql.sock shutdown
mysqladmin -u root(用户名) -密码 -S /data/3307/mysql.sock shutdown
4>配置mysql多实例的文件权限
[root@lll data]# chown -R mysql.mysql /data -----授权mysql用户管理/data目录
[root@lll data]# find /data/ -type f -name "mysql"
/data/3306/mysql
/data/3307/mysql
[root@lll data]# find /data/ -type f -name "mysql"|xargs ls -l
-rw-r--r-- 1 mysql mysql 1307 Jul 15 2013 /data/3306/mysql
-rw-r--r-- 1 mysql mysql 1307 Jul 21 2013 /data/3307/mysql
[root@lll data]# find /data/ -type f -name "mysql"|xargs chmod +x -----赋予mysql用户执行启动命令
[root@lll data]# find /data/ -type f -name "mysql"|xargs ls -l
-rwxr-xr-x 1 mysql mysql 1307 Jul 15 2013 /data/3306/mysql
-rwxr-xr-x 1 mysql mysql 1307 Jul 21 2013 /data/3307/mysql
在vim /etc/profile中export PATH=/application/mysql/bin:$PATH -----配置mysql全局环境变量
5>初始化mysql多实例的数据库文件(初始化的主要目的就是创建基础的数据库文件,例如:生成mysql库表等)
[root@lll scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
[root@lll scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
[root@lll scripts]# tree /data/3306/data
/data/3306/data
|-- mysql
| |-- columns_priv.MYD
| |-- columns_priv.MYI
| |-- columns_priv.frm
| |-- db.MYD
| |-- db.MYI
| |-- db.frm
| |-- event.MYD
| |-- event.MYI
| |-- event.frm
| |-- func.MYD
| |-- func.MYI
| |-- func.frm
| |-- general_log.CSM
| |-- general_log.CSV
| |-- general_log.frm
| |-- help_category.MYD
| |-- help_category.MYI
| |-- help_category.frm
| |-- help_keyword.MYD
| |-- help_keyword.MYI
| |-- help_keyword.frm
| |-- help_relation.MYD
| |-- help_relation.MYI
| |-- help_relation.frm
| |-- help_topic.MYD
| |-- help_topic.MYI
| |-- help_topic.frm
| |-- host.MYD
| |-- host.MYI
| |-- host.frm
| |-- ndb_binlog_index.MYD
| |-- ndb_binlog_index.MYI
| |-- ndb_binlog_index.frm
| |-- plugin.MYD
| |-- plugin.MYI
| |-- plugin.frm
| |-- proc.MYD
| |-- proc.MYI
| |-- proc.frm
| |-- procs_priv.MYD
| |-- procs_priv.MYI
| |-- procs_priv.frm
| |-- proxies_priv.MYD
| |-- proxies_priv.MYI
| |-- proxies_priv.frm
| |-- servers.MYD
| |-- servers.MYI
| |-- servers.frm
| |-- slow_log.CSM
| |-- slow_log.CSV
| |-- slow_log.frm
| |-- tables_priv.MYD
| |-- tables_priv.MYI
| |-- tables_priv.frm
| |-- time_zone.MYD
| |-- time_zone.MYI
| |-- time_zone.frm
| |-- time_zone_leap_second.MYD
| |-- time_zone_leap_second.MYI
| |-- time_zone_leap_second.frm
| |-- time_zone_name.MYD
| |-- time_zone_name.MYI
| |-- time_zone_name.frm
| |-- time_zone_transition.MYD
| |-- time_zone_transition.MYI
| |-- time_zone_transition.frm
| |-- time_zone_transition_type.MYD
| |-- time_zone_transition_type.MYI
| |-- time_zone_transition_type.frm
| |-- user.MYD
| |-- user.MYI
| `-- user.frm
|-- performance_schema
| |-- cond_instances.frm
| |-- db.opt
| |-- events_waits_current.frm
| |-- events_waits_history.frm
| |-- events_waits_history_long.frm
| |-- events_waits_summary_by_instance.frm
| |-- events_waits_summary_by_thread_by_event_name.frm
| |-- events_waits_summary_global_by_event_name.frm
| |-- file_instances.frm
| |-- file_summary_by_event_name.frm
| |-- file_summary_by_instance.frm
| |-- mutex_instances.frm
| |-- performance_timers.frm
| |-- rwlock_instances.frm
| |-- setup_consumers.frm
| |-- setup_instruments.frm
| |-- setup_timers.frm
| `-- threads.frm
`-- test
3 directories, 90 files
6>启动多实例数据库
[root@lll scripts]# /data/3306/mysql start
Starting MySQL...
[root@lll scripts]# /data/3307/mysql start
Starting MySQL...
[root@lll scripts]# netstat -lntup|grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5280/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 5999/mysqld
总结: mysqld是一个shell启动脚本,启动后最终会调用mysqld_safe脚本,最后调用mysqld服务启动mysql。mysqld是MySQL的守护进程,我们可以用mysqld来启动、关闭MySQL服务。
单实例启动:/etc/init.d/mysql start
单实例关闭:/usr/bin/mysqladmin -u root -p shutdown
单实例登录:mysql -u root -p
7>更改多实例密码
[root@lll 3306]# mysqladmin -u root -S /data/3306/mysql.sock password '123456' -----更改多实例密码
[root@lll 3306]# mysqladmin -u root -S /data/3307/mysql.sock password '123456' -----更改多实例密码
[root@lll 3306]# find /data -type f -name "mysql"
/data/3306/mysql
/data/3307/mysql
[root@lll 3306]# find /data -type f -name "mysql" -exec chmod 700 {} \;
[root@lll 3306]# find /data -type f -name "mysql" -exec chown root.root {} \;
[root@lll 3306]# find /data -type f -name "mysql" -exec ls -l {} \;
-rwx------ 1 root root 1307 Sep 9 11:56 /data/3306/mysql
-rwx------ 1 root root 1307 Sep 9 11:56 /data/3307/mysql
[root@lll 3306]# pkill mysqld
[root@lll 3306]# /data/3306/mysql start
Starting MySQL...
[root@lll 3306]# /data/3307/mysql start
Starting MySQL...
8>多实例登录(指定实例的socket文件登录)
多实例本地端登录通过socket文件来指定具体登录到哪个实例,此文件具体位置是在mysql初始化(mysql_install_db)时指定的.
[root@lll 3306]# mysql -uroot -p -S /data/3306/mysql.sock
一技之长,理财投资,写作思考 敬请关注“石林笔记”公众号或者扫我喲: