多实例介绍:
mysql多实例就是一台服务器开启多个不同的服务端口(3306,3307),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务端口。
这些mysql多实例共用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件。在提供服务时,多实例MySQL在逻辑上看来十个字独立的,多个实例之间是根据配置文件的设定值,来取得服务器的相关硬件资源
MySQL多实例常见配置方案
1.多配置文件方案 #通过多个配置文件及多个启动程序来实现多实例的方案 2.单一配置文件部署方案 #把所有的实例放在一个配置文件里,一个mysqld就是一个实例
安装配置多实例
1.建立MySQL多实例的条件 首先要用前面说过的四中安装方法之一(编译安装,cmake安装,yum安装,免编译安装)安装好数据库, 2.安装(看前面的) 3.开始配置 [root@MySQL /]# service mysqld stop [root@MySQL /]# mkdir /data/{3306,3307}/data -p #创建多实例目录 [root@MySQL /]# cat /data/3306/my.cnf #### [client] port = 3306 socket = /tmp/mysql_3306.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3306 socket = /tmp/mysql_3306.sock basedir = /usr/local/mysql-5.5.54/ 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 = 1 #log_long_format log-error = /data/3306/error_3306.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_3306.err pid-file=/data/3306/mysqld_3306.pid #### #另一个就不看了,把所有的3306换成3307即可 [root@MySQL /]# touch /data/3306/mysql_3306.err #创建相关错误日志文件 [root@MySQL /]# touch /data/3307/mysql_3307.err #创建相关错误日志文件 [root@MySQL /]# chown -R mysql.mysql /data [root@MySQL /]# mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql [root@MySQL /]# mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3307/data --user=mysql #初始化 [root@MySQL /]# mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 & [root@MySQL /]# mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 & #启动 #这里启动可以自己写个脚本,脚本放在下面 [root@MySQL /]# mysqladmin -uroot password -S /tmp/mysql_3306.sock [root@MySQL /]# mysqladmin -uroot password -S /tmp/mysql_3307.sock #为两个实例创建管理员和密码 [root@MySQL /]# mysql -uroot -p -S /tmp/mysql_3306.sock #连接数据库 #多实例到这里就安装完了
脚本
#!/bin/bash PORT=3306 USERNAME="root" PASSWORD="3306" start_mysql() { printf "Starting MySQL... " /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/${PORT}/my.cnf 2>&1 > /dev/null & } stop_mysql() { printf "Stoping MySQL... " /usr/local/mysql/bin/mysqladmin -u${USERNAME} -p${PASSWORD} -S /tmp/mysql_${PORT}.sock shutdown } restart_mysql() { printf "Restarting MySQL... " stop_mysql start_mysql } kill_mysql() { kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${PORT} | awk '{printf $2}') kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${PORT} | awk '{printf $2}') } case $1 in start) start_mysql;; stop) stop_mysql;; kill) kill_mysql;; restart) restart_mysql;; *) echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";; esac
新增实例
这个不写,跟前面是一样的,增加一个数据目录,配置文件,脚本,授权,初始化,启动