您的位置:首页 > 数据库 > MySQL

Mysql多实例多进程方案实践说明

2015-03-27 11:47 232 查看
环境说明
服务器:R310
raid:h700 level: raid 10
磁盘:2T
ip: 192.168.11.174
system:debian6_x64
mysql: 5.5.29
mysql安装方式为编译安装,请参照《Debian 6.0(squeeze) 下编译安装 MySQL 5.5》 或者 运行 lnmp.sh
编译安装之后,
mysql主目录:/usr/local/mysql目录
数据目录:/usr/local/data/mysql/
配置文件:/etc/my.cnf
启动脚本:/etc/init.d/mysqld

注意:确认mysql没启动,如果启动了需要停止mysql
检查/usr/local/data/mysql是否有这三个文件ib_logfile0 ib_logfile1 ibdata1
如果有,请进入/usr/local/data/mysql目录,在删除以下两个文件
-rw-rw---- 1 mysql mysql 5.0M Aug 15 07:29 ib_logfile0
-rw-rw---- 1 mysql mysql 5.0M Aug 15 07:26 ib_logfile1
-rw-rw---- 1 mysql mysql  18M Aug 15 07:29 ibdata1

/usr/local/data/mysql# rm ib_logfile0 ib_logfile1 ibdata1

删除之后,暂时不启动mysql
多实例多进程流程
1、先生成实例mysql2 mysql3
sh /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/data/mysql2 --user=mysql
sh /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/data/mysql3 --user=mysql
chown -R mysql:mysql /usr/local/data/mysql2
chown -R mysql:mysql /usr/local/data/mysql3

2、修改/etc/my.cnf配置文件
备份
cp /etc/my.cnf /etc/my.cnf.bak

修改如下
vim /etc/my.cnf

[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
#user       = mysqladmin
#password   = sydbg
log = /usr/local/data/mysql/multi.log
[mysqld1]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
pid-file = /usr/local/data/mysql/mysqld1.pid
datadir = /usr/local/data/mysql
log-error=/usr/local/data/mysql/mysql1.err
key_buffer              = 384M
max_allowed_packet      = 16M
thread_stack            = 256K
thread_cache_size       = 32
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
tmp_table_size = 64M
max_heap_table_size = 4G
myisam-recover         = BACKUP
max_connections        = 500
query_cache_limit       = 1M
query_cache_size        = 32M
#log-bin=mysql-bin
expire_logs_days        = 10
max_binlog_size         = 100M
# binary logging format - mixed recommended
binlog_format=mixed
#log-bin=mysql-bin
expire_logs_days        = 10
max_binlog_size         = 100M
# binary logging format - mixed recommended
binlog_format=mixed
innodb_additional_mem_pool_size = 16M
innodb_autoextend_increment = 8M
innodb_buffer_pool_size = 2G
innodb_checksums = 1
innodb_commit_concurrency = 0
innodb_concurrency_tickets = 500
innodb_doublewrite = 1
innodb_fast_shutdown = 1
innodb_file_io_threads = 4
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 30
innodb_locks_unsafe_for_binlog = 0
innodb_log_buffer_size = 3M
innodb_max_dirty_pages_pct = 80
innodb_open_files = 3000
innodb_data_file_path=ibdata1:50M:autoextend
innodb_log_file_size = 800M
innodb_log_files_in_group = 2
user       = mysql
[mysqld2]
port            = 3307
socket          = /tmp/mysql.sock2
skip-external-locking
pid-file = /usr/local/data/mysql2/mysqld2.pid
datadir = /usr/local/data/mysql2
log-error=/usr/local/data/mysql2/mysql2.err
key_buffer              = 384M
max_allowed_packet      = 16M
thread_stack            = 256K
thread_cache_size       = 32
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
tmp_table_size = 64M
max_heap_table_size = 4G
myisam-recover         = BACKUP
max_connections        = 500
query_cache_limit       = 1M
query_cache_size        = 32M
#log-bin=mysql-bin
expire_logs_days        = 10
max_binlog_size         = 100M
# binary logging format - mixed recommended
binlog_format=mixed
#log-bin=mysql-bin
expire_logs_days        = 10
max_binlog_size         = 100M
# binary logging format - mixed recommended
binlog_format=mixed
innodb_additional_mem_pool_size = 16M
innodb_autoextend_increment = 8M
innodb_buffer_pool_size = 2G
innodb_checksums = 1
innodb_commit_concurrency = 0
innodb_concurrency_tickets = 500
innodb_doublewrite = 1
innodb_fast_shutdown = 1
innodb_file_io_threads = 4
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 30
innodb_locks_unsafe_for_binlog = 0
innodb_log_buffer_size = 3M
innodb_max_dirty_pages_pct = 80
innodb_open_files = 3000
innodb_data_file_path=ibdata1:50M:autoextend
innodb_log_file_size = 800M
innodb_log_files_in_group = 2
user       = mysql
[mysqld3]
port            = 3308
socket          = /tmp/mysql.sock3
skip-external-locking
pid-file = /usr/local/data/mysql3/mysqld3.pid
datadir = /usr/local/data/mysql3
log-error=/usr/local/data/mysql3/mysql3.err
key_buffer              = 384M
max_allowed_packet      = 16M
thread_stack            = 256K
thread_cache_size       = 32
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
tmp_table_size = 64M
max_heap_table_size = 4G
myisam-recover         = BACKUP
max_connections        = 500
query_cache_limit       = 1M
query_cache_size        = 32M
#log-bin=mysql-bin
expire_logs_days        = 10
max_binlog_size         = 100M
# binary logging format - mixed recommended
binlog_format=mixed
#log-bin=mysql-bin
expire_logs_days        = 10
max_binlog_size         = 100M
# binary logging format - mixed recommended
binlog_format=mixed
innodb_additional_mem_pool_size = 16M
innodb_autoextend_increment = 8M
innodb_buffer_pool_size = 2G
innodb_checksums = 1
innodb_commit_concurrency = 0
innodb_concurrency_tickets = 500
innodb_doublewrite = 1
innodb_fast_shutdown = 1
innodb_file_io_threads = 4
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 30
innodb_locks_unsafe_for_binlog = 0
innodb_log_buffer_size = 3M
innodb_max_dirty_pages_pct = 80
innodb_open_files = 3000
innodb_data_file_path=ibdata1:50M:autoextend
innodb_log_file_size = 800M
innodb_log_files_in_group = 2
user       = mysql
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#!includedir /etc/mysql/conf.d/

3、启动mysql mysql2 mysql3

将多实例脚本拷贝至/etc/init.d/
cp  /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi

开启
/etc/init.d/mysqld_multi start 1-3

查看端口是否监听
root@demohost:/etc# netstat -ano | egrep "3307|3308|3306"
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      off (0.00/0/0)

进入数据库,检查是否正常
mysql -uroot -p -P3306 -h127.0.0.1
mysql -uroot -p -P3307 -h127.0.0.1
mysql -uroot -p -P3308 -h127.0.0.1

停止,有两个方案

方案一
说明:需要在配置文件里面加入一个账户,密码为明文,非常不安全,不推荐

进入数据库,检查是否正常
mysql -uroot -p -P3306 -h127.0.0.1
mysql -uroot -p -P3307 -h127.0.0.1
mysql -uroot -p -P3308 -h127.0.0.1

查看权限表
mysql> select user,host,password from mysql.user;
+------------+-----------+-------------------------------------------+
| user       | host      | password                                  |
+------------+-----------+-------------------------------------------+
| root       | localhost |                                           |
| root       | demohost  |                                           |
| root       | 127.0.0.1 |                                           |
| root       | ::1       |                                           |
|            | localhost |                                           |
|            | demohost  |                                           |
| mysqladmin | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------------+-----------+-------------------------------------------+

删除匿名账号
drop user ''@'demohost';
drop user ''@'localhost';
drop user 'mysqladmin'@'127.0.0.1';

查看匿名账号是否正常
mysql> select user,host,password from mysql.user;
+------------+-----------+-------------------------------------------+
| user       | host      | password                                  |
+------------+-----------+-------------------------------------------+
| root       | localhost |                                           |
| root       | demohost  |                                           |
| root       | 127.0.0.1 |                                           |
| root       | ::1       |                                           |
| mysqladmin | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------------+-----------+-------------------------------------------+

在三个实例上,都加入拥有停止服务的账号权限,如:
GRANT ALL PRIVILEGES ON *.* TO 'mysqladmin'@'localhost' IDENTIFIED BY '123456';

修改/etc/my.cnf配置
将
[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
#user       = mysqladmin
#password   = sydbg
log = /usr/local/data/mysql/multi.log
改为
[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user       = mysqladmin
password   = sydbg
log = /usr/local/data/mysql/multi.log

停止mysql服务
mysqladmin shutdown -uroot -p -P3306 -h127.0.0.1
mysqladmin shutdown -uroot -p -P3307 -h127.0.0.1
mysqladmin shutdown -uroot -p -P3308 -h127.0.0.1

查看端口是否还被监听
netstat -ano | egrep "3307|3308|3306"

启动服务,让mysql重新加载配置
/etc/init.d/mysqld_multi start 1-3

之后就可以使用如下命令控制进程
/etc/init.d/mysqld_multi stop 1-3

方案二
停止mysql服务
mysqladmin shutdown -uroot -p -P3306 -h127.0.0.1
mysqladmin shutdown -uroot -p -P3307 -h127.0.0.1
mysqladmin shutdown -uroot -p -P3308 -h127.0.0.1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 多实例 多进程