3.1、什么是mysql多实例:


3、mysql的多实例配置(1)_mysql

3.2、mysql多实例的作用和问题:


3、mysql的多实例配置(1)_多实例_02

3.3、mysql多实例生产应用的场景:

1、资金紧张的公司:


3、mysql的多实例配置(1)_mysql_03

2、并发访问并不是很大的业务:


3、mysql的多实例配置(1)_多实例_04

3、门户网站应用mysql多实例场景:


3、mysql的多实例配置(1)_多实例_05

48核,百度服务器;

3.4、mysql多实例常见配置:


3、mysql的多实例配置(1)_多实例_06


3、mysql的多实例配置(1)_mysql_07


3、mysql的多实例配置(1)_服务器_08

3.5、安装mysql多实例:

生产环境硬件配置:内存32g、cpu 8核、6*600g sas 15k,2-3个实例;

本文档以cmak编译安装好mysql后进行的多实例安装;

1、安装mysql多实例的条件:

(1)安装mysql,安装依赖的包;

yum install ncurses-devel -y #编译时已经安装

yum install libaio-devel -y

(2)以cmake编译安装mysql进行的多实例安装和二

进制安装的mysql安装多实例的方法一致;

2、条件准备:

(1)因为已经安装好了单实例,进行清理(二进制安装同理,实际安装时到数据库初始化之前

且目录权限和环境变量已配好);

[root@backup application]# pkill mysqld

[root@backup application]# ps -ef | grep mysql | grep -v grep

[root@backup application]# rm -f /etc/init.d/mysqld

[root@backup application]# rm -f /etc/my.cnf

[root@backup application]# rm -rf mysql/data/*

(2)设置mysql多实例的目录:

[root@backup application]# mkdir -p /data/{3306,3307}/data

[root@backup application]# tree /data

/data

├── 3306

│   └── data

└── 3307

└── data

4 directories, 0 files

(3)mysql多实例启动和停止服务的实质:

如果my.cnf不在/etc/目录下面,mysql的启动和停止如下;


3、mysql的多实例配置(1)_mysql_09

3、设置mysql多实例的配置文件:

说明:以下服务器内存16G,4核。

(1)3306:

###############################################################

#该配置参数可用于主从复制,也可用于单实例16G_4核;

#普通的日志文件在'/data/3306/'目录,打开了binlog日志(保存14天);

#中继日志在数据目录下面(自动清理无用的中继日志);

###############################################################
[client]

port = 3306

socket = /data/3306/mysql.sock

default-character-set=utf8

#客户端的字符集,可以通过修改/etc/i18n修改,不需重启mysql;

[mysql]

no-auto-rehash

#不开启mysql命令自动补全

[mysqld]

#read-only

#只读权限,一般设置在从库,对all privileges和super权限用户无效;

#skip-networking

###########################################################

#开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB 服务器是以远程连接

#的方式访问MySQL数据库服务器则不要开启该选项,否则将无法正常连接;如果所有

#的进程都是在同一台服务器连接到本地的 mysqld, 这样设置将是增强安全的方法;

###########################################################

user = mysql

port = 3306

socket = /data/3306/mysql.sock

basedir = /application/mysql

datadir = /data/3306/data

open_files_limit = 10240

#mysql打开的文件描述符长度;

#default-character-set=utf8 #mysql5.1

character-set-server = utf8 #mysql5.5

#建库时的字符集,编译时指定可以不指定,修改时需要重启mysql服务;

back_log = 600

#接受的tcp队列;

max_connections = 3000

#会话上限;

max_connect_errors = 6000

#客户端密码错误允许最大次数;

table_open_cache = 614

#所有线程最大打开表的数量;

skip-external-locking

#不允许外部文件级别的锁;

max_allowed_packet = 32M

#设置在网络传输中一次消息传输量的最大值,最大为1GB,默认1MB;

sort_buffer_size = 2M #重点优化参数;

###########################################################

#最小排序缓冲字节;并不是越大越好,由于是connection级的参数,过大的设置+高

#并发可能会耗尽系统内存资源。例如:500个连接将会消耗

#500*sort_buffer_size(8M)=4G内存;

###########################################################

join_buffer_size = 2M

#联合查询所使用的缓冲区大小;

thread_cache_size = 300 #重点优化参数;

###########################################################

#保留多少线程缓存;设置规则如下:

#1GB 内存配置为8,2GB配置为16,3GB配置为32,4GB或更高内存,可配置更大。

###########################################################

thread_concurrency = 8 #重点优化参数;

#此允许应用程序示在同一时间给予渴望被运行的线程的数量:cpu数*2;

query_cache_size = 64M #重点优化参数;

###########################################################

#查询缓存大小,如有下一次同样查询不在处理直接返回结果;该参数不适合分配过

#大而且在高并发,写入量大的系统,建议把该功能禁掉。

###########################################################

query_cache_limit = 4M

#指定单个查询能够使用的缓冲区大小,默认是1M;

query_cache_min_res_unit = 2K

###########################################################

#默认4k,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易

#造成内存碎片和浪费;

###########################################################

default-storage-engine = InnoDB

#InnoDB数据库引擎,支持事物,用于insert,update;

#default-storage-engine = MyISAM

#MyISAM数据库引擎,不支持事物,用于select;

thread_stack = 192K

#线程的堆大小,128K到4GB;

transaction_isolation = READ-COMMITTE #重点优化参数;

###########################################################

#查看事物隔离级别的方法:SELECT @@tx_isolation;设定可用的级别如下:

#1.READ-UNCOMMITTED读未提交;2.READ-COMMITTE读已提交;

#3.REPEATABLE-READ可重复读(默认);4.SERIALIZABLE串行;

###########################################################

tmp_table_size = 256M

#单个临时表的大小,超过此值放入磁盘;

max_heap_table_size = 256M

#独立的单个表内存表的大小

slow_query_log = ON

long_query_time = 2

slow_query_log_file = /data/3306/mysql-slow.log

#以上三个参数记录慢日志,查询时间超过2秒以上的

#log-queries-not-using-indexes

#如果运行的SQL语句没有使用索引,mysql会将这条SQL语句记录到慢查询日志文件中。

#general_log = ON

#将所有到达MySQLServer的SQL语句记录下来,默认关闭;

#general_log_file = /data/3306/mysql.log

#general_log文件位置,默认在数据库的data目录下;

relay-log = /data/3306/data/mysqld-relay-bin

#定义relay_log的位置和名称,用于从库,默认位置在数据文件的目录;

max_relay_log_size = 512M

#relay-log允许的最大值,如果该值为0大小为1G,默认是1G;

relay-log-purge = ON

#自动清空不再需要中继日志时,默认启用;

log-bin = /data/3306/mysql-bin

#打开二进制日志功能.在复制(replication)配置中,作为MASTER主服务器必须打开此项;

binlog_cache_size = 4M

binlog_format = mixed #重点优化参数;

##########################################################

#row:行级,体积大,支持函数等;statement:默认,对函数支持不是很好模;

#mixed:兼容row和statement模式,推荐;

#innodb的事务隔离级别是read-commited或read-uncommited模式时,

#binlog不可以使用statement模式;

##########################################################

max_binlog_cache_size = 8M

max_binlog_size = 512M

#binlog的最大值是多少;

expire_logs_days = 14

#超过14天的binlog会被删除;

key_buffer_size = 2048M

#########################################################

#指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。

#对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB。

#########################################################

read_buffer_size = 1M

#读查询操作所能使用的缓冲区大小。

read_rnd_buffer_size = 16M

#MySql的随机读(查询操作)缓冲区大小。

bulk_insert_buffer_size = 64M

#批量插入数据缓存大小,可以有效提高插入效率,默认为8M;

myisam_sort_buffer_size = 128M

#MyISAM表发生变化时重新排序所需的缓冲;

myisam_max_sort_file_size = 10G

#MySQL重建索引时所允许的最大临时文件的大小;

myisam_repair_threads = 1

#########################################################

#如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用,超过一个线程

#去修复他们,这对于拥有多个CPU以及大量内存情况的用户,是一个很好的选择;

#########################################################

myisam_recover_options=force,backup

#########################################################

#自动检查和修复没有适当关闭的 MyISAM 表。back:在恢复过程中数据文件被

#更改了,将tbl_name.MYD文件备份为tbl_name-datetime.BAK。force:即使

#MYD文件将丢掉多个行也进行恢复。

#########################################################

skip-name-resolve

#禁止MySQL对外部连接进行DNS解析,解决mysql连接慢的问题;

lower_case_table_names = 1

#表名存储在磁盘是小写的,比较的时候是不区分大小写的。

slave-skip-errors = 1007,1022,1050,1062,1169

#在从库上配置,跳过主从同步时的错误,主要是跳过重复的值;

#binlog-do-db = test

#允许同步的数据库,默认允许所有的库同步;

#binlog-ignore-db = information_schema

#binlog-ignore-db = performance_schema

#主从同步时设置不需要同步的库;

server-id = 1

#表示是本机的序号为1,唯一;

innodb_additional_mem_pool_size = 16M

#############################################################

#这个参数用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小,

#这不是一个强制参数,可以被突破。

#############################################################

innodb_buffer_pool_size = 2048M #重点优化参数

#############################################################

#包括数据页、索引页、插入缓存、锁信息、自适应哈希所以、数据字典信息;

#物理内存的30%-50%;

#############################################################

#innodb_data_home_dir = /data/3306/data

#InnoDB共享表空间的位置,默认是data目录;

innodb_data_file_path = ibdata1:1024M:autoextend

#innodb共享表空间文件,重要数据,不指定默认会生成;

innodb_file_io_threads = 4

#############################################################

#用来同步 IO 操作的 IO 线程的数量. 此值在 Unix 下被硬编码为 4,但是在Windows磁盘

#I/O可能在一个大数值下表现的更好;

#############################################################

innodb_thread_concurrency = 4 #重点优化参数

#innodb线程,服务器有几个CPU就设置为几,建议用默认设置,一般为8,为0时不限制。

innodb_flush_log_at_trx_commit = 2 #重点优化参数;

##############################################################

#如果将此参数设置为1,将在每次提交事务后将日志写入磁盘。为提供性能,可以设置为

#0或2,但要承担在发生故障时丢失数据的风险。0和2最大的不同是,如果MySQL进程挂

#了,2不会丢失任何事务,如果是整个服务器挂了,则还是可能丢失一些事务的。

##############################################################

innodb_log_buffer_size = 16M

##############################################################

#此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外

#的故障将会丢失数据.MySQL开发人员建议设置为1-8M之间;

##############################################################

innodb_log_file_size = 128M

###############################################################

#此参数确定数据日志文件的大小,以M为单位,更大的设置可以提高性能,但也会增加恢

#复故障数据库所需的时间;

###############################################################

innodb_log_files_in_group = 3

#为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3;

innodb_max_dirty_pages_pct = 90

#innodb刷新时间(s),越小io负担越重,越大内存、cpu负担越重,建议在75-90;

innodb_lock_wait_timeout = 120

#InnoDB 事务在被回滚之前可以等待一个锁定的超时秒数,即等待另一个表锁被释放的时间。

innodb_file_per_table = 1

#InnoDB为独立的表空间模式,在Insert操作上有优势;

innodb_write_io_threads = 4

innodb_read_io_threads = 4

###############################################################

#innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的CPU核数来更改,默

#认是4;这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL

#服务,允许值的范围从 1-64;

###############################################################

#innodb_force_recovery=1

#如果你发现 InnoDB 表空间损坏, 设置此值为一个非零值可能帮助你导出你的表.从1开

#始并且增加此值知道你能够成功的导出表。

################################################################

sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#mysql支持的基本语法及校验规则

symbolic-links=0

#关闭数据分区存储

[mysqldump]

quick

#支持较大数据库的转储;

max_allowed_packet = 32M

[mysqld_safe]

log-error=/data/3306/mysql.err

pid-file=/data/3306/mysqld.pid



提示:

在my.cnf配置参数项中有中杠、下划线,两者都支持,使用"show global variables like '';"

时使用的是下划线。

(2)3307:

3307配置文件和3306的配置文件一致,需要修改server-id=2和将

3306配置文件中的路径改为3307的路径即可;

(3)目录树:

[root@backup application]# tree /data

/data

├── 3306

│   ├── data

│   └── my.cnf

└── 3307

├── data

└── my.cnf

4 directories, 2 files