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