3.1、什么是mysql多实例:
3.2、mysql多实例的作用和问题:
3.3、mysql多实例生产应用的场景:
1、资金紧张的公司:
2、并发访问并不是很大的业务:
3、门户网站应用mysql多实例场景:
48核,百度服务器;
3.4、mysql多实例常见配置:
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多实例的配置文件:
说明:以下服务器内存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