MySQL多实例就是,在一台机器上开启多个不同的服务端口(如:3306,3307,3308...),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的端口提供服务。
一.基本概念
MySQL多实例就是,在一台机器上开启多个不同的服务端口(如:3306,3307,3308...),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的端口提供服务。
MySQL可以共用一套安全程序,使用不同的my.cnf配置文件,启动程序,数据文件。
逻辑上是独立的,但是一个实例过载过高的时候会对其他造成影响。
MySQL多实例的作用与问题:
1.有效利用服务器资源
2.节约服务器资源
3.资源互相抢占问题
当某个服务实现并发生很高的或者有慢查询的时候,这个实例会消耗很多的内存。
二.MySQL常见的配置方案
1.多个配置文件,多个启动程序
2.单一配置文件部署方案
三.开始安装
1.安装依赖包
yum -y install ncurses-devel libaio-devel
2.杀掉之前的MySQL进程
- pkillmysqld
- netstat-ntlp
- ps-ef|grepmysql
- rm-f/etc/init.d/mysqld
3.创建多实例的目录结构
- mkdir-p/data/{3306,3307}/data
- tree/data
4.创建多实例的配置文件
多实例启动文件的启动MySQL服务实质:
- mysql_safe--defaults-file=/data/3306/my.cnf2>&1>/dev/null&
多实例启动文件的关闭MySQL服务实质
- mysqladmin-uroot-p***-S/data/3306/mysql.sockshutdown
- my.cnf
- [client]
- port=3306
- socket=/data/3306/mysql.sock
- [mysql]
- no-auto-rehash
- [mysqld]
- user=mysql
- port=3306
- socket=/data/3306/mysql.sock
- basedir=/application/mysql
- datadir=/data/3306/data
- open_files_limit=1024
- back_log=600
- max_connections=800
- max_connect_errors=3000
- table_cache=614
- external-locking=FALSE
- max_allowed_packet=8M
- sort_buffer_size=1M
- join_buffer_size=1M
- thread_cache_size=100
- thread_concurrency=2
- query_cache_size=2M
- query_cache_limit=1M
- query_cache_min_res_unit=2k
- #default_table_type=InnoDB
- thread_stack=192K
- #transaction_isolation=READ-COMMITTED
- tmp_table_size=2M
- max_heap_table_size=2M
- long_query_time=1
- #log_long_format
- #log-error=/data/3306/error.log
- #log-slow-queries=/data/3306/slow.log
- pid-file=/data/3306/mysql.pid
- log-bin=/data/3306/mysql-bin
- relay-log=/data/3306/relay-bin
- relay-log-info-file=/data/3306/relay-log.info
- binlog_cache_size=1M
- max_binlog_cache_size=1M
- max_binlog_size=2M
- expire_logs_days=7
- key_buffer_size=16M
- read_buffer_size=1M
- read_rnd_buffer_size=1M
- bulk_insert_buffer_size=1M
- #myisam_sort_buffer_size=1M
- #myisam_max_sort_file_size=10G
- #myisam_max_extra_sort_file_size=10G
- #myisam_repair_threads=1
- #myisam_recover
- lower_case_table_names=1
- skip-name-resolve
- slave-skip-errors=1032,1062
- replicate-ignore-db=mysql
- server-id=1
- innodb_additional_mem_pool_size=4M
- innodb_buffer_pool_size=32M
- innodb_data_file_path=ibdata1:128M:autoextend
- innodb_file_io_threads=4
- innodb_thread_concurrency=8
- innodb_flush_log_at_trx_commit=2
- innodb_log_buffer_size=2M
- innodb_log_file_size=4M
- innodb_log_files_in_group=3
- innodb_max_dirty_pages_pct=90
- innodb_lock_wait_timeout=120
- innodb_file_per_table=0
- [mysqldump]
- quick
- max_allowed_packet=2M
- [mysqld_safe]
- log-error=/data/3306/mysql_qb3306.err
- pid-file=/data/3306/mysqld.pid
配置的时候需要注意端口,还有***的日志需要自己知道在哪,方便排错;再有就是有一个"server-id = 1"***每个实例的id不要一样。
mysql(启动关闭服务的脚本)
- #!/bin/sh
- #init
- port=3306
- mysql_user="root"
- mysql_pwd="qb123"
- CmdPath="/application/mysql/bin"
- mysql_sock="/data/${port}/mysql.sock"
- #startupfunction
- function_start_mysql()
- {
- if[!-e"$mysql_sock"];then
- printf"StartingMySQL...\n"
- /bin/sh${CmdPath}/mysqld_safe--defaults-file=/data/${port}/my.cnf2>&1>/dev/null&
- else
- printf"MySQLisrunning...\n"
- exit
- fi
- }
- #stopfunction
- function_stop_mysql()
- {
- if[!-e"$mysql_sock"];then
- printf"MySQLisstopped...\n"
- exit
- else
- printf"StopingMySQL...\n"
- ${CmdPath}/mysqladmin-u${mysql_user}-p${mysql_pwd}-S/data/${port}/mysql.sockshutdown
- fi
- }
- #restartfunction
- function_restart_mysql()
- {
- printf"RestartingMySQL...\n"
- function_stop_mysql
- sleep2
- function_start_mysql
- }
- case$1in
- start)
- function_start_mysql
- ;;
- stop)
- function_stop_mysql
- ;;
- restart)
- function_restart_mysql
- ;;
- *)
- printf"Usage:/data/${port}/mysql{start|stop|restart}\n"
- esac
5.授权
- chown-Rmysql.mysql/data/
- find/data/-typef-name"mysql"|xargsls-l
- find/data/-typef-name"mysql"|xargschmod+x
如果没做会出现文件找不见问题,希望遇到想到这里。
6.配置mysql命令的全局使用路径
(PATH)
7.初始化(每个端口都做,这里做3306)
- cdmysql/scripts/
- ./mysql_install_db--basedir=/application/mysql--datadir=/data/3306/data/--user=mysql
(看见两个OK即为初始化成功)
(这样做是为了创建基本的数据文件)
8.启动服务
- /data/3306/mysqlstart
- /data/3307/mysqlstart
- netstat-ntlup|grep330
如果端口没有起来,排查办法如下:
等几十秒,可能起来比较慢
看日志,tail /data/3306/mysql_qb3306.err
细看执行命令的屏幕返回输出
查看系统日志,/var/log/messages
注:由于脚本不是很完善,重启命令***是
- /data/3306/mysqlstop
- /data/3306/mysqlstart
9.多实例登录
- mysql-S/data/3306/mysql.sock
- mysql-S/data/3307/mysql.sock
四.MySQL安全配置
1.为root添加密码
- mysqladmin-uroot-S/data/3306/mysql.sockpassword'***'
注:在/data/3306/下的mysql里面也需要改成这个密码,
是mysqladmin不是mysql,,需要mysql服务起来要不然没有mysql.sock文件
正因为上面的原因,由于密码是在一个文件里面,需要设置授权,设置只能root用户操作;
- find/data/-typef-name"mysql"-execchmod700{}\;
- find/data/-typef-name"mysql"-execchownroot.root{}\;
- find/data/-typef-name"mysql"-execls-l{}\;
然后
- pkillmysqld
- /data/3306/mysqlstop
- /data/3307/mysqlstop
- /data/3307/mysqlstart
- /data/3306/mysqlstart
- netstat-ntlup|grep330
2.查询并清理多余用户
(安装MySQL的时候已经操作多)
3.登录
- mysql-uroot-p***-S/data/3306/mysql.sock
4.修改密码:
先登录
- mysql>alteruser'root'@'localhost'identifiedby'newpassword';
五.增加一个MySQL实例
- mkdir-p/data/3308/data
- cp/data/3306/my.cnf/data/3308/
- cp/data/3306/mysql/data/3308/
- cd/data/3308
- ls
- chown-Rmysql.mysql/data/3308
- vimmy.cnf
- :g/3306/s//3308/g-----改端口
- 再改了server_id
- vimmysql
- 改端口
- cd/application/mysql/scripts/
- ./mysql_install_db--user=mysql--basedir=/application/mysql--datadir=/data/3308/data/
- /data/3308/mysqlstart
- mysqladmin-uroot-S/data/3308/mysql.sockpassword'***'
- mysql-uroot-p***-S/data/3308/mysql.sock
- (将/data/3308/mysql文件里面的密码也改成一样的)
- find/data/-typef-name"mysql"-execchmod700{}\;
- find/data/-typef-name"mysql"-execchownroot.root{}\;
- find/data/-typef-name"mysql"-execls-l{}\;
©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经