linux下mysql多实例部署

前言:简单的说就是在一台服务器上开启多个不同的服务端口(如:3306,3307),运行多个msyql服务进程,这些服务进程通过不同的 socket监听不同的服务端口来提供各自的服务。这些mysql多实例共用一套mysql安装程序,使用不同(也可以相同)的my.cnf配置文件,启动程序,数据文件。在提供服务时,多实例mysql在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得服务器相关硬件资源多少(cpu,mem,disk)。其实,其它许多服务例如tomcat,Nginx等都可以多实例。

通过配置多个配置文件,多个数据文件及多个启动程序来实现多实例的方案.

image.png


一>多实例安装部署

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         

总结: mysql的启动底层就是调用mysqld进程来启动。


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


猜你喜欢

转载自blog.51cto.com/11218855/2172796