chunjihong 发表于 2018-9-27 06:49:43

MySQL管理多个实例的方法

  MySQL运行多实例有2种方法,第一种是使用多个配置文件启动不同的进程来实现多实例;第二种是通过mysqld_multi使用单独的配置文件来实现多实例
  环境准备:

  操作系统:Red Hat Enterprise Linux Server>  MySQL版本:mysql-5.6.22-linux-glibc2.5-x86_64
  要运行多实例,首先安装MySQL软件,安装方法参考之前的博文:MySQL安装,安装好MySQL软件之后,下面分别创建端口分别为3306,3307,3308,3309的多实例,无论使用哪种方式来管理多实例,都是需要初始化多个数据库的
  一、使用多个配置文件来管理多实例
  1、创建各实例的配置文件
  # mkdir /data/mysql/conf/ -p
  # cd /data/mysql/conf/
  # vim my_3306.cnf
  
port            = 3306
  
socket          = /tmp/mysql_3306.sock
  

  

  
prompt="\\u@\\h:\p\\R:\\m:\\s [\\d]>"
  
#tee=/data/mysql/mysql_3306/query.log
  
no-auto-rehash
  

  

  

  
#misc
  
user = mysql
  
basedir = /usr/local/mysql
  
datadir = /data/mysql/mysql_3306
  
port = 3306
  
socket = /tmp/mysql_3306.sock
  
event_scheduler = 0
  

  
#timeout
  
interactive_timeout = 300
  
wait_timeout = 300
  

  
#character set
  
character-set-server = utf8
  

  
open_files_limit = 65535
  
max_connections = 100
  
max_connect_errors = 100000
  

  
skip-name-resolve = 1
  
#logs
  
log-output=file
  
slow_query_log = 1
  
slow_query_log_file = slow.log
  
log-error = error.log
  
log_warnings = 2
  
pid-file = mysql.pid
  
long_query_time = 1
  
#log-slow-admin-statements = 1
  
#log-queries-not-using-indexes = 1
  
log-slow-slave-statements = 1
  

  

  
#binlog
  
binlog_format = row
  
server-id = 883306
  
log-bin =mysql-bin
  
binlog_cache_size = 4M
  
max_binlog_size = 1G
  
max_binlog_cache_size = 2G
  
sync_binlog = 0
  
expire_logs_days = 10
  

  
#relay log
  
skip_slave_start = 1
  
max_relay_log_size = 1G
  
relay_log_purge = 1
  
relay_log_recovery = 1
  
log_slave_updates
  
#slave-skip-errors=1032,1053,1062
  

  
explicit_defaults_for_timestamp=true
  
#buffers & cache
  
table_open_cache = 2048
  
table_definition_cache = 2048
  
table_open_cache = 2048
  
max_heap_table_size = 96M
  
sort_buffer_size = 2M
  
join_buffer_size = 2M
  
thread_cache_size = 256
  
query_cache_size = 0
  
query_cache_type = 0
  
query_cache_limit = 256K
  
query_cache_min_res_unit = 512
  
thread_stack = 192K
  
tmp_table_size = 96M
  
key_buffer_size = 8M
  
read_buffer_size = 2M
  
read_rnd_buffer_size = 16M
  
bulk_insert_buffer_size = 32M
  

  
#myisam
  
myisam_sort_buffer_size = 128M
  
#myisam_max_sort_file_size = 10G
  
myisam_max_sort_file_size = 100M
  

  
myisam_repair_threads = 1
  

  
#innodb
  
innodb_buffer_pool_size = 100M
  
innodb_buffer_pool_instances = 1
  
innodb_data_file_path = ibdata1:1G:autoextend
  
innodb_flush_log_at_trx_commit = 2
  
innodb_log_buffer_size = 64M
  
innodb_log_file_size = 500M
  
innodb_log_files_in_group = 3
  
innodb_max_dirty_pages_pct = 50
  
innodb_file_per_table = 1
  
innodb_rollback_on_timeout
  
innodb_status_file = 1
  
innodb_io_capacity = 2000
  
transaction_isolation = READ-COMMITTED
  
innodb_flush_method = O_DIRECT
  端口3307,3308,3309的MySQL实例的配置文件和端口3306的配置文件相似,只需要替换端口即可
  # cpmy_3306.cnfmy_3307.cnf
  # cpmy_3306.cnfmy_3308.cnf
  # cpmy_3306.cnfmy_3309.cnf
  # sed-i's/3306/3307/g'my_3307.cnf
  # sed-i's/3306/3308/g'my_3308.cnf
  # sed-i's/3306/3309/g'my_3309.cnf
  # chown mysq.mysql /data/mysql/conf -R
  2、初始化数据库
  # cd /usr/local/mysql
  # ./scripts/mysql_install_db --user=mysql --defaults-file=/data/mysql/conf/my_3306.cn--datadir=/data/mysql/mysql_3306/
  # ./scripts/mysql_install_db --user=mysql --defaults-file=/data/mysql/conf/my_3307.cn--datadir=/data/mysql/mysql_3307/
  # ./scripts/mysql_install_db --user=mysql --defaults-file=/data/mysql/conf/my_3308.cn--datadir=/data/mysql/mysql_3308/
  # ./scripts/mysql_install_db --user=mysql --defaults-file=/data/mysql/conf/my_3309.cn--datadir=/data/mysql/mysql_3309/
  3、启动数据库
  # mysqld_safe --defaults-file=/data/mysql/conf/my_3306.cnf &
  # mysqld_safe --defaults-file=/data/mysql/conf/my_3307.cnf &
  # mysqld_safe --defaults-file=/data/mysql/conf/my_3308.cnf &
  # mysqld_safe --defaults-file=/data/mysql/conf/my_3309.cnf &
  观察MySQL进程
  # ps -ef | grep mysqld
root      15873120430 09:55 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my_3306.cnf  
mysql   16773158730 09:55 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/conf/my_3306.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql_3306 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql_3306/error.log --open-files-limit=65535 --pid-file=/data/mysql/mysql_3306/mysql.pid --socket=/tmp/mysql_3306.sock --port=3306
  
root      16875120430 09:56 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my_3307.cnf
  
mysql   17775168752 09:56 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/conf/my_3307.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql_3307 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql_3307/error.log --open-files-limit=65535 --pid-file=/data/mysql/mysql_3307/mysql.pid --socket=/tmp/mysql_3307.sock --port=3307
  
root      17800120430 09:56 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my_3308.cnf
  
mysql   18700178007 09:56 pts/0    00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/conf/my_3308.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql_3308 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql_3308/error.log --open-files-limit=65535 --pid-file=/data/mysql/mysql_3308/mysql.pid --socket=/tmp/mysql_3308.sock --port=3308
  
root      18723120430 09:56 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my_3309.cnf
  
mysql   19623187237 09:56 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/conf/my_3309.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql_3309 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql_3309/error.log --open-files-limit=65535 --pid-file=/data/mysql/mysql_3309/mysql.pid --socket=/tmp/mysql_3309.sock --port=3309
  登录MySQL数据
  # mysql -S /tmp/mysql_3306.sock
  # mysql -S /tmp/mysql_3307.sock
  # mysql -S /tmp/mysql_3308.sock
  # mysql -S /tmp/mysql_3309.sock
  4、关闭MySQL进程
  mysqladmin shutdown -S /tmp/mysql_3306.sock
  mysqladmin shutdown -S /tmp/mysql_3307.sock
  mysqladmin shutdown -S /tmp/mysql_3308.sock
  mysqladmin shutdown -S /tmp/mysql_3309.sock
  二、使用mysqld_multi来管理MySQL数据
  创建统一的配置文件
  # cat /etc/my.cnf
  
port            = 3306
  
socket          = /tmp/mysql_3306.sock
  

  

  
prompt="\\u@\\h:\p\\R:\\m:\\s [\\d]>"
  
#tee=/data/mysql/mysql_3306/query.log
  
no-auto-rehash
  

  

  
mysqld = /usr/local/mysql/bin/mysqld_safe
  
mysqladmin = /usr/local/mysql/bin/mysqladmin
  
log = /data/mysql/mysql_multi/mysqld_multi.log
  

  

  
#misc
  
user = mysql
  
basedir = /usr/local/mysql
  
datadir = /data/mysql/mysql_3306
  
port = 3306
  
socket = /tmp/mysql_3306.sock
  
event_scheduler = 0
  

  
#timeout
  
interactive_timeout = 300
  
wait_timeout = 300
  

  
#character set
  
character-set-server = utf8
  

  
open_files_limit = 65535
  
max_connections = 100
  
max_connect_errors = 100000
  

  
skip-name-resolve = 1
  
#logs
  
log-output=file
  
slow_query_log = 1
  
slow_query_log_file = slow.log
  
log-error = error.log
  
log_warnings = 2
  
pid-file = mysql.pid
  
long_query_time = 1
  
#log-slow-admin-statements = 1
  
#log-queries-not-using-indexes = 1
  
log-slow-slave-statements = 1
  

  

  
#binlog
  
binlog_format = row
  
server-id = 883306
  
log-bin =mysql-bin
  
binlog_cache_size = 4M
  
max_binlog_size = 1G
  
max_binlog_cache_size = 2G
  
sync_binlog = 0
  
expire_logs_days = 10
  

  
#relay log
  
skip_slave_start = 1
  
max_relay_log_size = 1G
  
relay_log_purge = 1
  
relay_log_recovery = 1
  
log_slave_updates
  
#slave-skip-errors=1032,1053,1062
  

  
explicit_defaults_for_timestamp=true
  
#buffers & cache
  
table_open_cache = 2048
  
table_definition_cache = 2048
  
table_open_cache = 2048
  
max_heap_table_size = 96M
  
sort_buffer_size = 2M
  
join_buffer_size = 2M
  
thread_cache_size = 256
  
query_cache_size = 0
  
query_cache_type = 0
  
query_cache_limit = 256K
  
query_cache_min_res_unit = 512
  
thread_stack = 192K
  
tmp_table_size = 96M
  
key_buffer_size = 8M
  
read_buffer_size = 2M
  
read_rnd_buffer_size = 16M
  
bulk_insert_buffer_size = 32M
  

  
#myisam
  
myisam_sort_buffer_size = 128M
  
#myisam_max_sort_file_size = 10G
  
myisam_max_sort_file_size = 100M
  

  
myisam_repair_threads = 1
  

  
#innodb
  
innodb_buffer_pool_size = 100M
  
innodb_buffer_pool_instances = 1
  
innodb_data_file_path = ibdata1:1G:autoextend
  
innodb_flush_log_at_trx_commit = 2
  
innodb_log_buffer_size = 64M
  
innodb_log_file_size = 500M
  
innodb_log_files_in_group = 3
  
innodb_max_dirty_pages_pct = 50
  
innodb_file_per_table = 1
  
innodb_rollback_on_timeout
  
innodb_status_file = 1
  
innodb_io_capacity = 2000
  
transaction_isolation = READ-COMMITTED
  
innodb_flush_method = O_DIRECT
  

  

  
#端口号为3306的实例特殊配置
  

  
port =3306
  
server-id=883306
  
#指定本实例相应版本的basedir和datadir
  
basedir= /usr/local/mysql
  
datadir = /data/mysql/mysql_3306
  
socket          = /tmp/mysql_3306.sock
  
#重新配置这几个选项,不与全局配置一样,会直接覆盖上面的全局设置
  
innodb_buffer_pool_size = 100m
  
#transaction_isolation = REPEATABLE-READ
  

  

  
#端口号为3306的实例特殊配置
  

  
port =3307
  
server-id=883307
  
#指定本实例相应版本的basedir和datadir
  
basedir= /usr/local/mysql
  
datadir = /data/mysql/mysql_3307
  
socket          = /tmp/mysql_3307.sock
  
#重新配置这几个选项,不与全局配置一样,会直接覆盖上面的全局设置
  
innodb_buffer_pool_size = 100m
  
#transaction_isolation = REPEATABLE-READ
  

  

  
port=3308
  
server-id=883308
  
#binlog-do-db=database01
  
basedir= /usr/local/mysql
  
datadir = /data/mysql/mysql_3308
  
socket          = /tmp/mysql_3308.sock
  
#重新配置这几个选项,不与全局配置一样,会直接覆盖上面的全局设置
  
innodb_buffer_pool_size = 100m
  
innodb_flush_log_at_trx_commit = 2
  
sync_binlog = 0
  

  

  

  
port=3309
  
server-id=883309
  
#binlog-do-db=database02
  
basedir= /usr/local/mysql
  
datadir = /data/mysql/mysql_3309
  
socket = /tmp/mysql_3309.sock
  
#重新配置这几个选项,不与全局配置一样,会直接覆盖上面的全局设置
  
innodb_buffer_pool_size = 100m
  
innodb_flush_log_at_trx_commit = 2
  
sync_binlog = 0
  # mkdir /data/mysql/mysql_multi/#用来存放mysql_multi产生的日志
  # chown mysql.mysql /data/mysql/mysql_multi/-R
  2、初始化数据库
  如已经初始化,则不必在再次初始化
  # cd /usr/local/mysql
  # ./scripts/mysql_install_db --user=mysql--datadir=/data/mysql/mysql_3306/
  # ./scripts/mysql_install_db --user=mysql--datadir=/data/mysql/mysql_3307/
  # ./scripts/mysql_install_db --user=mysql--datadir=/data/mysql/mysql_3308/
  # ./scripts/mysql_install_db --user=mysql--datadir=/data/mysql/mysql_3309/
  3、启动MySQL数据
  # mysqld_multi start 3306,3307,3308,3309#也可单独启动
  # mysqld_multi report 3306,3307,3308,3309
  Reporting MySQL servers
  MySQL server from group: mysqld3306 is running
  MySQL server from group: mysqld3307 is running
  MySQL server from group: mysqld3308 is running
  MySQL server from group: mysqld3309 is running
  # tailf /data/mysql/mysql_multi/mysqld_multi.log
  151213 23:01:06 mysqld_safe Starting mysqld daemon with databases from /data/mysql/mysql_3306
  151213 23:01:06 mysqld_safe Starting mysqld daemon with databases from /data/mysql/mysql_3307
  151213 23:01:06 mysqld_safe Starting mysqld daemon with databases from /data/mysql/mysql_3308
  151213 23:01:06 mysqld_safe Starting mysqld daemon with databases from /data/mysql/mysql_3309
  mysqld_multi log file version 2.16; run: Sun Dec 13 23:01:27 2015
  Reporting MySQL servers
  MySQL server from group: mysqld3306 is running
  MySQL server from group: mysqld3307 is running
  MySQL server from group: mysqld3308 is running
  MySQL server from group: mysqld3309 is running
  登录MySQL数据库:
  # mysql -S /tmp/mysql_3306.sock
  # mysql -S /tmp/mysql_3307.sock
  # mysql -S /tmp/mysql_3308.sock
  # mysql -S /tmp/mysql_3307.sock
  4、关闭MySQL数据库
  # mysqld_multi stop 3306
  # mysqld_multi stop 3307,3308,3309
  # ps -ef | grep mysqld
  root      30822120430 23:04 pts/0    00:00:00 grep mysqld
  此外,该配置文件还可以用来单独启动3306的MySQL实例
  # cp /usr/local/mysql/support-files/mysql.server/etc/init.d/mysqld
  # chmod +x /etc/init.d/mysqld
  # /etc/init.d/mysqld start
  Starting MySQL..                                       
  # mysql -S /tmp/mysql_3306.sock
  # /etc/init.d/mysqld stop
  Shutting down MySQL..                                    


页: [1]
查看完整版本: MySQL管理多个实例的方法