1、MySQL多实例的基本概念是在一台机器上开启多个不同的服务端口(如:3306、3307、3308……),同时运行多个MySQL服务过程。这些服务进程通过不同的套接字监听不同的端口来提供服务。MySQL可以共享一套安全程序,使用不同的my.cnf配置文件、启动程序和数据文件。它们在逻辑上是独立的,但是当一个实例过载时,它会影响另一个。MySQL多实例的作用和问题:1、有效利用服务器资源2、节省服务器资源3、资源抢占问题当一个服务实现时,出现高查询或慢查询时,这个实例会消耗大量的内存。二、MySQL常用配置方案1、多配置文件、多启动程序2、单配置文件部署方案3、开始安装1、安装依赖包yum-yinstallncurses-devellibaio-devel2、杀掉之前的MySQL进程pkillmysqldnetstat-ntlpps-ef|grepmysqlrm-f/etc/init.d/mysqld3。创建多实例目录结构mkdir-p/data/{3306,3307}/datatree/data4。创建多实例配置文件Multi-instancestartup启动MySQL服务文件内容:mysql_safe--defaults-file=/data/3306/my.cnf2>&1>/dev/null&关闭MySQL内容多实例启动文件服务mysqladmin-uroot-p***-S/data/3306/mysql.sockshutdownmy.cnf[client]port=3306socket=/data/3306/mysql.sock[mysql]no-auto-rehash[mysqld]user=mysqlport=3306socket=/data/3306/mysql.sockbasedir=/application/mysqldatadir=/data/3306/dataopen_files_limit=1024back_log=600max_connections=800max_connect_errors=3000table_cache=614external-locking=FALSEmax_allowed_pa??cket=8=1cche_Mbuffer_buffer_thread_size=8Msort_Mbuffer_Mbuffer_thread_size=1024back_log=600max_connections=800max_connect_errors=3000table_cache=614外部锁定=FALSEmax_allowed_pa??cket=8=1024back_log=600max_connections=800max_connect_errors=3000table_cache=100thread_concurrency=2query_cache_size=2Mquery_cache_limit=1Mquery_cache_min_res_unit=2k#default_table_type=InnoDBthread_stack=192K#transaction_isolation=READ-COMMITTEDtmp_table_size=2Mmax_heap_table_size=2Mlong_query_time=1#log_long_format#log-error=/data/3306/error.log#log-slow-queries=/data/3306/slow.logpid-file=/data/3306/mysql.pidlog-bin=/数据/3306/mysql-binrelay-log=/data/3306/relay-binrelay-log-info-file=/data/3306/relay-log.infobinlog_cache_size=1Mmax_binlog_cache_size=1Mmax_binlog_size=2Mexpire_logs_days=7key_buffer_size=16Mread_buffer_size=1Mread_rnd_buffer_size=1Mbuffer_size=1Mbuffer_size1M#myisam_sort_buffer_size=1M#myisam_max_sort_file_size=10G#myisam_max_extra_sort_file_size=10G#myisam_repair_threads=1#myisam_recoverlower_case_table_names=1skip-name-resolveslave-skip-errors=1032,1062replicate-ignore-db=mysqlserver-id=1innodb_additional_mem_pool_size=4Minnodb_buffer_pool_size=32Minnodb_data_file_path=ibdata1:128M:autoextendinnodb_file_io_threads=4innodb_thread_concurrency=8innodb_flush_log_at_trx_commit=2innodb_log_buffer_size=2Minnodb_log_file_size=4Minnodb_log_files_in_group=3innodb_max_dirty_pages_pct=90innodb_lock_wait_timeout=120innodb_file_per_table=0[mysqldump]quickmax_allowed_pa??cket=2M[mysqld_safe]log-error=/data/3306/mysql_qb3306.errpid-file=/data/3306/mysqld.pid配置时需要注意端口和***log你需要知道它在哪里,方便故障排除;有一个“server-id=1”***每个实例的ID不能相同mysql(启动关闭服务的脚本)#!/bin/sh#initport=3306mysql_user="root"mysql_pwd="qb123"CmdPath="/application/mysql/bin"mysql_sock="/data/${port}/mysql.sock"#startupfunctionfunction_start_mysql(){if[!-e"$mysql_sock"];thenprintf"StartingMySQL...\n"/bin/sh${CmdPath}/mysqld_safe--defaults-file=/data/${port}/my.cnf2>&1>/dev/null&elseprintf"MySQLisrunning...\n"exitfi}#stopfunctionfunction_stop_mysql(){if[!-e"$mysql_sock"];thenprintf"MySQLisstopped...\n"exitelseprintf"停止MySQL。..\n"${CmdPath}/mysqladmin-u${mysql_user}-p${mysql_pwd}-S/data/${port}/mysql.sockshutdownfi}#restartfunctionfunction_restart_mysql(){printf"正在重启MySQL...\n"function_stop_mysqlsleep2function_start_mysql}case$1instart)function_start_mysql;;stop)function_stop_mysql;;restart)function_restart_mysql;;*)printf"用法:/data/${port}/mysql{start|stop|restart}\n"esac5。授权chown-Rmysql.mysql/data/find/data/-typef-name"mysql"|xargsls-lfind/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/mysqlstartnetstat-ntlup|grep330如果端口起不来的话,排查方法如下:等待几十秒,可能起的比较慢,看日志,tail/data/3306/mysql_qb3306。不是很完美,重启命令***是/data/3306/mysqlstop/data/3306/mysqlstart9。多实例登录mysql-S/data/3306/mysql.sockmysql-S/data/3307/mysql.sock4。MySQL安全配置1.为root添加密码mysqladmin-uroot-S/data/3306/mysql.sockpassword'***'注意:这个密码也需要在/data/3306/下的mysql中修改,不是mysqladminmysql,,需要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/mysqlstartnetstat-ntlup|grep3302。查询并清理冗余3、登录mysql-uroot-p***-S/data/3306/mysql.sock4、修改密码:先登录mysql>alteruser'root'@'localhost'identifiedby'newpassword';五。添加一个MySQL实例mkdir-p/data/3308/datacp/data/3306/my.cnf/data/3308/cp/data/3306/mysql/data/3308/cd/data/3308lschown-Rmysql。mysql/data/3308vimmy.cnf:g/3306/s//3308/g-----更改端口再更改server_idvimmysql更改端口cd/application/mysql/scripts/./mysql_install_db--user=mysql--basedir=/application/mysql--datadir=/data/3308/data//data/3308/mysqlstartmysqladmin-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{}\;
