MySQL多个实例的方法

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

环境准备:

操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago)

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

[client]
port            = 3306
socket          = /tmp/mysql_3306.sock
 
[mysql]
prompt="\\[email protected]\\h:\p  \\R:\\m:\\s [\\d]>"
#tee=/data/mysql/mysql_3306/query.log
no-auto-rehash
 
 
[mysqld]
#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的配置文件相似,只需要替换端口即可

# cp  my_3306.cnf  my_3307.cnf

# cp  my_3306.cnf  my_3308.cnf

# cp  my_3306.cnf  my_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      15873  12043  0 09:55 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my_3306.cnf
mysql     16773  15873  0 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      16875  12043  0 09:56 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my_3307.cnf
mysql     17775  16875  2 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      17800  12043  0 09:56 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my_3308.cnf
mysql     18700  17800  7 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      18723  12043  0 09:56 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/conf/my_3309.cnf
mysql     19623  18723  7 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

[client]
port            = 3306
socket          = /tmp/mysql_3306.sock
 
[mysql]
prompt="\\[email protected]\\h:\p  \\R:\\m:\\s [\\d]>"
#tee=/data/mysql/mysql_3306/query.log
no-auto-rehash
 
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /data/mysql/mysql_multi/mysqld_multi.log
 
[mysqld]
#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的实例特殊配置
[mysqld3306]
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的实例特殊配置
[mysqld3307]
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
 
[mysqld3308]
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
 
 
[mysqld3309]
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      30822  12043  0 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..                                         [  OK  ]

# mysql -S /tmp/mysql_3306.sock

# /etc/init.d/mysqld stop

Shutting down MySQL..                                      [  OK  ]

时间: 2024-12-12 16:12:41

MySQL多个实例的方法的相关文章

cmake安装mysql及多实例配置方法

一.安装mysql 1. 生产环境如何选择MySQL版本 1. 选择社区版的稳定GA版本2. 可以选择5.1或5.5.互联网公司主流5.5, 其次是5.1和5.63. 选择发布后6个月以上的GA版4. 要选择前后几个月没有打的BUG修复的版本,而不是大量修复BUG的几种版本5. 最好选择向后较长时间没有更新发布的版本6. 考虑开发人员开发程序使用的版本是否兼容你选的版本7. 企业非核心业务采用新版本的数据库GA版本软件8. 作为内部开发测试数据库环境,跑大概3-6个月时间9. 向DBA高手请教,

MySQL创建用户与授权方法实例精讲

MySQL中创建用户与授权的实现方法. 运行环境:widnows xp professional + MySQL5.0 一, 创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空

mysql只读模式的设置方法与实验【转】

在MySQL数据库中,在进行数据迁移和从库只读状态设置时,都会涉及到只读状态和Master-slave的设置和关系. 经过实际测试,对于MySQL单实例数据库和master库,如果需要设置为只读状态,需要进行如下操作和设置:      将MySQL设置为只读状态的命令:# mysql -uroot -pmysql> show global variables like "%read_only%";mysql> flush tables with read lock;mysq

MySQL单机多实例部署详解

一.mysql多实例的原理 mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程.这些服务进程通过不同的socket监听不同的服务端口,来提供各自的服务. 这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配置文件.启动程序.数据文件.在提供服务时,mysql多实例在逻辑上看来是各自独立的,各个实例之间根据配置文件的设定值,来取得服务器的相关硬件资源. 二.mysql多实例的特点 2.1 有效的利用服

mysql防止重复插入记录方法总结

防止mysql重复插入记录的方法有很多种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了. 方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: 代码如下:  代码如下 复制代码  INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('[email protec

mysql之innodb引擎使用方法

前言 闲来无事做不如MySQL. 一.简介:1.Linux下使用MySQL数据库时,为了支持事务操作需要用到InnoDB引擎,对于表中处理的插入,更新等操作失败时,回滚前面不应该完成的操作是必须的. 2.一般MySQL默认的数据库引擎是MyISAM,不支持事务和外键,则可使用支持事务和外键的InnoDB引擎. 3.本笔记着重讲解MySQL的autocommit变量,如何在数据库中设置自动提交,禁止自动提交,如何在对表操作失败后回滚,对表操作成功后提交事务! 二.操作方法MySQL的autocom

Ajax+SpringMVC+Spring+Mybatis+MySql+js用户注册实例

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:这几天研究了下Ajax注册的方法,通过在注册时输入用户名或邮箱等,就可以判断这个用户是否存在,以免用户来注册,然后提交了,系统才提示该用户名或邮箱不可用.使用Ajax便可实现这一功能,看了网上的都是php的,想想索性来写一个SpringMVC+Spring+Mybatis的.文章内容用到了很多技术,包括javascript.jquery.json.e表达式等. 先来看看最终效果: 注册

MySQL增量备份与恢复实例【转】

小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份.增量备份的原理就是使用了mysql的binlog日志.本次操作的MySQL版本为5.5.40 for Linux (x86_64). 增量备份要确保打开了二进制日志,参考mysql的日志系统: mysql> show variables like '%log_bin%'; 首先对pak数据库做一个完整备份: $ mysqldump -h localhost -u

MySQL(mariadb)多实例应用与多实例主从复制

MySQL多实例 mysql多实例,简单理解就是在一台服务器上,mysql服务开启多个不同的端口(如3306.3307,3308),运行多个服务进程.这些 mysql 服务进程通过不同的 socket来监听不同的数据端口,进而互不干涉的提供各自的服务. 在同一台服务器上,mysql 多实例会去共用一套 mysql 应用程序,因此在部署 mysql的时候只需要部署一次 mysql程序即可,无需多次部署.但是,mysql多实例之间会各自使用不同的 my.cnf 配置文件.启动程序和数据文件.在提供服