环境说明
服务器: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