Mysql 5.5.49 多实例安装

多实例概述

mysql多实例通俗的讲就是在一台机器上使用同一个mysql安装程序使用相同的硬件资源,运行多个mysql进程,这些进程有单独的进程号,端口,
存储空间以及配置文件,不会互相影响,他们各自有独立的配置文件(可以相同)启动程序(可以相同)。
多端口多进程,每个端口就是一个实例,各个进程之间没有关系,但他们又同用相同的硬件资源。

多实例优势

  • 充分利用硬件资源,但单个服务器用剩余硬件资源时可以充分利用
  • 节省服务器开销,多实例相当于从逻辑上把一台服务器变成了多台使用,常规讲一台服务器装一台数据库,多实例却装了多台.
  • 多实例带来方便的同时也产生了相应的问题,由于多个实例安装在一台服务器上,归根结底还是使用了同样的硬件,当数据库负载大时会出现硬件资源抢占 ,某个实例高并发或者慢查询时,整个实例会消耗大量系统的CPU与磁盘I/O等资源,导致服务器上 的其他实例的服务质量下降,这就需要在安装多实例对服务器做好规划,读写实例分开安装,尽量平均负载. 而且,多个数据库共用一台服务器,服务器宕机 会影响这台服务器上的所有实例. 某种程度上降低了高可用,这就需要部署MHA支持.

    多实例安装

    多实例安装选用源码包安装,按照make,make install 的方式进行,不同的是在进行数据库初始化时为他指定单独的数据目录,以及配置文件即可.多实例数据库的启动关闭需要使用socket文件来定位到指定的数据库.

 #系统版本
[root@MySql-5 ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@MySql-5 ~]#  uname -ai
Linux db01 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@MySql-5 ~]#
[root@MySql-5 ~]# hostname -i
172.16.1.51
[root@MySql-5 ~]#

## Mysql 编译 ##
#使用cmack编译,安装cmack .直接yum安装即可
yum install cmake -y
#安装依赖包
yum install ncurses-devel -y
#mysql 进程用户
useradd mysql -s /sbin/nologin -M

下载mysql 5.5.49的源码包,可以直接到官网下载
#解压
tar zxf mysql-5.5.49.tar.gz -C /application
cd   /application/mysql-5.5.49
#编译参数
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.49 -DMYSQL_DATADIR=/application/mysql-5.5.49/data -DMYSQL_UNIX_ADDR=/application/mysql-5.5.49/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_ZLIB=bundled  -DWITH_READLINE=1  -DWITH_EMBEDDED_SERVER=1  -DWITH_DEBUG=0
#编译过程中每一步都要使用echo $? 查看返回值,必须为0

ln -s /application/mysql-5.5.49/ /application/mysql
chown -R mysql.mysql /application/mysql/
echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile
source /etc/profile

Tables Are
-DCMAKE_INSTALL_PREFIX 安装目录
-DMYSQL_DATADIR mysql数据文件目录
-DMYSQL_UNIX_ADDR mysql.cock路径
-DDEFAULT_CHARSET 默认字符集
-DDEFAULT_COLLATION 默认排序规则
-DEXTRA_CHARSETS 额外的字符集类型
-DENABLED_LOCAL_INFILE 本地数据导入支持
-DWITH_INNOBASE_STORAGE_ENGINE -DWITH_[ENGINE]_STORAGE_ENGINE
=1启用某个引擎的支持
=0关闭某个引擎的支持
-DWITH_ZLIB 启用libz库支持
-DWITH_READLINE 启用readline 库的支持提供可供编辑的命令行
-DWITH_EMBEDDED_SERVER 嵌入式服务支持
-DWITH_DEBUG DEBUG设置,缺省是禁止

Mysql 多实例配置文件,启动程序

[root@MySql-5 ~]# tree /data
/data/
├── 3306                           #实例3306的安装目录
│   ├── my.cnf                   #3306的配置文件
│   └── mysql                    #3306的启动程序
└── 3307                          #实例3307的安装目录
    ├── my.cnf                    #3307的配置文件
    └── mysql                     #3307的启动程序

多实例的配置文件和启动程序可以共用一个,但是并不推荐,多实例的server id 不能相同还有许多选项需要单独配置.

配置文件

配置文件的解释是在其他文章里面摘抄的, 文章如下:
http://www.jb51.net/article/48082.htm
http://www.jb51.net/article/70464.htm
http://www.ha97.com/4110.html

# 以下选项会被MySQL客户端应用读取, 注意只有MySQL附带的客户端应用程序保证可以读取这段内容,
如果你想你自己的MySQL应用程序获取这些值,需要在MySQL客户端库初始化的时候指定这些选项
[client]
port            = 3306              #客户端连接时的默认端口 

socket          = /data/3306/mysql.sock   
#与mysql服务器本地通信所使用的socket文件路径


[mysql]
no-auto-rehash   

#mysql 服务器的配置选项
[mysqld]
user    = mysql                      #mysql启动用户    
port    = 3306                       #mysql服务器监听的默认端口 
socket  = /data/3306/mysql.sock      #socket本地通信文件路径  
basedir = /application/mysql         #mysql的程序目录  
datadir = /data/3306/data            #3306的数据目录

open_files_limit    = 1024          
# MySQL打开的文件描述符限制,默认最小1024;
#当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,
#哪个大用哪个,
# 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5 的值,
#哪个大用哪个

back_log = 600
# back_log 是操作系统在监听队列中所能保持的连接数,
# 队列保存了在MySQL连接管理器线程处理之前的连接. 
# 如果你有非常高的连接率并且出现“connection refused”报错, 
# 你就应该增加此处的值. 
# 检查你的操作系统能打开文件数来获取这个变量的最大值. 
# 如果将back_log设定到比你操作系统限制更高的值,将会没有效果

max_connections = 800
# MySQL 服务器所允许的同时会话数的上限
# 其中一个连接将被SUPER权限保留作为管理员登录. 
# 即便已经达到了连接数的上限. 

max_connect_errors = 3000
# 每个客户端连接最大的错误允许数量,如果达到了此限制.
# 这个客户端将会被MySQL服务阻止直到执行了”FLUSH HOSTS” 或者服务重启 
# 非法的密码以及其他在链接时的错误会增加此值. 
# 查看 “Aborted_connects” 状态来获取全局计数器. 

table_cache = 614
# 所有线程所打开表的数量.
# 增加此值就增加了mysqld所需要的文件描述符的数量
# 这样你需要确认在[mysqld_safe]中 “open-files-limit” 变量设置打开文件数量允许至少4096

external-locking = FALSE
# 允许外部文件级别的锁. 打开文件锁会对性能造成负面影响
# 所以只有在你在同样的文件上运行多个数据库实例时才使用此选项(注意仍会有其他约束!) 
# 或者你在文件层面上使用了其他一些软件依赖来锁定MyISAM表

max_allowed_packet =8M
# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一起工作时相当必要)
# 每个连接独立的大小.大小动态增加

sort_buffer_size = 1M
# 排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序
# 如果排序后的数据无法放入排序缓冲,
# 一个用来替代的基于磁盘的合并分类会被使用
# 查看 “Sort_merge_passes” 状态变量.
# 在排序发生时由每个线程分配 

join_buffer_size = 1M
# 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享

thread_cache_size = 100
# 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,
#那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,
#如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,
#如果有很多新的线程,增加这个值可以改善系统性能.
#通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。
(–>表示要调整的值)
# 根据物理内存设置规则如下:
# 1G  —> 8
# 2G  —> 16
# 3G  —> 32
# 大于3G  —> 64

thread_concurrency = 2
# 此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.
# 此值只对于支持 thread_concurrency() 函数的系统有意义( 例如Sun Solaris).
# 你可可以尝试使用 [CPU数量]*(2..4) 来作为thread_concurrency的值

query_cache_size = 2M
#MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,
#MySQL将SELECT语句和查询结果存放在缓冲区中,
# 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。
#根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。
# 通过检查状态值'Qcache_%',可以知道query_cache_size设置是否合理:
#如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,
# 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;
#如果Qcache_hits的值不大,则表明你的查询重复率很低,
# 这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。
#此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲

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

query_cache_min_res_unit = 2k

default_table_type = InnoDB
# 当创建新表时作为默认使用的表类型,
# 如果在创建表示没有特别执行表类型,将会使用此值

thread_stack = 192K
# 线程使用的堆大小. 此容量的内存在每次连接时被预留.
# MySQL 本身常不会需要超过64K的内存
# 如果你使用你自己的需要大量堆的UDF函数
# 或者你的操作系统对于某些操作需要更多的堆,
# 你也许需要将其设置的更高一点.

#transaction_isolation = READ-COMMITTED
# 设定默认的事务隔离级别.可用的级别如下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE

tmp_table_size = 2M
# 内部(内存中)临时表的最大大小
# 如果一个表增长到比此值更大,将会自动转换为基于磁盘的表.
# 此限制是针对单个表的,而不是总和.

max_heap_table_size = 2M
# 独立的内存表所允许的最大容量.
# 此选项为了防止意外创建一个超大的内存表导致永尽所有的内存资源.

long_query_time = 2
# 所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.
# 不要在这里使用”1″, 否则会导致所有的查询,甚至非常快的查询页被记录下来
#(由于MySQL 目前时间的精确度只能达到秒的级别).
#log_long_format
# 在慢速日志中记录更多的信息.
# 一般此项最好打开.
# 打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里
#此选项mysql 5.5 不支持了
#slow-query-log = /data/3306/slow.log
# 记录慢速查询. 慢速查询是指消耗了比 “long_query_time” 定义的更多时间的查询.
# 如果 log_long_format 被打开,那些没有使用索引的查询也会被记录.
# 如果你经常增加新查询到已有的系统内的话. 一般来说这是一个好主意,

#log-error = /data/3306/error.log
#错误日志

pid-file = /data/3306/mysql.pid
log-bin = /data/3306/mysql-bin
# 打开二进制日志功能.
# 在复制(replication)配置中,作为MASTER主服务器必须打开此项
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.

# 如果你在使用链式从服务器结构的复制模式 (A->B->C),
# 你需要在服务器B上打开此项.
# 此选项打开在从线程上重做过的更新的日志, # 并将其写入从服务器的二进制日志.
#log_slave_updates

relay-log = /data/3306/relay-bin
relay-log-info-file = /data/3306/relay-log.info

binlog_cache_size = 1M
# 在一个事务中binlog为了记录SQL状态所持有的cache大小
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每个连接的事务第一次更新状态时被创建

max_binlog_cache_size = 1M
max_binlog_size = 2M
expire_logs_days = 7

key_buffer_size = 16M
# 关键词缓冲的大小, 一般用来缓冲MyISAM表的索引块.
# 不要将其设置大于你可用内存的30%,
# 因为一部分内存同样被OS用来缓冲行数据
# 甚至在你并不使用MyISAM 表的情况下, 你也需要仍旧设置起 8-64M 内存由于它同样会被内部临时磁盘表使用.

read_buffer_size = 1M
# MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。
#read_buffer_size变量控制这一缓冲区的大小。
# 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能


read_rnd_buffer_size = 1M
# MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,
# MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。
#但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大

bulk_insert_buffer_size = 1M
# 批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时, 提高效率。
#默认值是8M。可以针对数据量的大小,翻倍增加。

#myisam_sort_buffer_size = 1M
# MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 
#MyISAM索引分配的缓冲区
#myisam_max_sort_file_size = 10G
# MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)
#这个参数以字节的形式给出
#myisam_max_extra_sort_file_size = 10G
# 如果被用来更快的索引创建索引所使用临时文件大于制定的值,那就使用键值缓冲方法.
# 这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来创建索引.
#myisam_repair_threads = 1
# 如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.
# 这对于拥有多个CPU以及大量内存情况的用户,是一个很好的选择.
#myisam_recover
# 自动检查和修复没有适当关闭的 MyISAM 表.

lower_case_table_names = 1   #不区分大小写

skip-name-resolve
#禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。
#但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!

slave-skip-errors = 1032,1062
replicate-ignore-db=mysql

server-id = 1
# 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# 此值在master和slave上都需要设置.
# 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.

innodb_additional_mem_pool_size = 4M
# 附加的内存池被InnoDB用来保存 metadata 信息
# 如果InnoDB为此目的需要更多的内存,它会开始从OS这里申请内存.
# 由于这个操作在大多数现代操作系统上已经足够快, 你一般不需要修改此值.
# SHOW INNODB STATUS 命令会显示当先使用的数量.

innodb_buffer_pool_size = 32M
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,
# 所以不要设置的太高.

innodb_data_file_path = ibdata1:128M:autoextend
# InnoDB 将数据保存在一个或者多个数据文件中成为表空间.
# 如果你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.
# 其他情况下.每个设备一个文件一般都是个好的选择.
# 你也可以配置InnoDB来使用裸盘分区 – 请参考手册来获取更多相关内容

innodb_file_io_threads = 4
# 用来同步IO操作的IO线程的数量. This value is
# 此值在Unix下被硬编码为4,但是在Windows磁盘I/O可能在一个大数值下表现的更好.

innodb_thread_concurrency = 8
# 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量,过高的值可能导致线程的互斥颠簸.

innodb_flush_log_at_trx_commit = 2
# 如果设置为1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上,
# 这提供了完整的ACID行为.
# 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,
#但是在系统崩溃的时候,你将会丢失1秒的数据。

# 如果你愿意对事务安全折衷, 并且你正在运行一个小的事物, 你可以设置此值到0或者2来减少由事务日志引起的磁盘I/O

# 0代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘,
#提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。
# 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。
#不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1
#设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。
#InnoDB在做恢复的时候会忽略这个值。

# 如果设为2,,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。
#要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
# 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,
#而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘
# 总结
# 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。
#如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能

innodb_log_buffer_size = 2M
# 用来缓冲日志数据的缓冲区的大小.
# 当此值快满时, InnoDB将必须刷新数据到磁盘上.
# 由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大(甚至对于长事务而言)

innodb_log_file_size = 4M
# 在日志组中每个日志文件的大小.
# 你应该设置日志文件总合大小到你缓冲池大小的25%~100%
# 来避免在日志文件覆写上不必要的缓冲池刷新行为.
# 不论如何, 请注意一个大的日志文件大小会增加恢复进程所需要的时间.

innodb_log_files_in_group = 3
# 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
innodb_max_dirty_pages_pct = 90
# innodb主线程刷新缓存池中的数据,使脏数据比例小于90%

innodb_lock_wait_timeout = 120
# InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。
#InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒

innodb_file_per_table = 0
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
# 独立表空间优点:
# 1.每个表都有自已独立的表空间。
# 2.每个表的数据和索引都会存在自已的表空间中。
# 3.可以实现单表在不同的数据库中移动。
# 4.空间可以回收(除drop table操作处,表空不能自已回收)
# 缺点:
# 单表增加过大,如超过100G
# 结论:
# 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files
innodb_open_files = 500
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300

[mysqldump]
quick   
# 不要在将内存中的整个结果写入磁盘之前缓存. 在导出非常巨大的表时需要此项
max_allowed_packet = 2M   #服务器发送和接受的最大包长度

[mysqld_safe]
log-error=/data/3306/mysql_3306.err
pid-file=/data/3306/mysqld.pid

3306 3307 my.cnf对比

[root@MySql-5 ~]#diff /data/3306/my.cnf  /data/3307/my.cnf
2,3c2,3
< port            = 3306
< socket          = /data/3306/mysql.sock
---
> port            = 3307
> socket          = /data/3307/mysql.sock
10,11c10,11
< port    = 3306
< socket  = /data/3306/mysql.sock
---
> port    = 3307
> socket  = /data/3307/mysql.sock
13c13
< datadir = /data/3306/data
---
> datadir = /data/3307/data
33c33
< long_query_time = 1
---
> #long_query_time = 1
35,40c35,40
< #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
---
> #log-error = /data/3307/error.log
> #log-slow-queries = /data/3307/slow.log
> pid-file = /data/3307/mysql.pid
> #log-bin = /data/3307/mysql-bin
> relay-log = /data/3307/relay-bin
> relay-log-info-file = /data/3307/relay-log.info
60c60
< server-id = 1
---
> server-id = 3
79,80c79,80
< log-error=/data/3306/mysql_3306.err
< pid-file=/data/3306/mysqld.pid
---
> log-error=/data/3307/mysql_3307.err
> pid-file=/data/3307/mysqld.pid

多实例启动脚本

#/*************************************************************************/
#   FileName: mysql
#     Author: ali6102
#       Mail: [email protected]
#    Created: Fri 28 Apr 2017 06:07:44 PM CST
#       Note: mysql 启动脚本
#
#/*************************************************************************/
#!/bin/bash

#init
Port=3306
Mysql_User="root"
Mysql_Pwd="redhat"
CmdPath="/application/mysql/bin"
Mysql_Sock="/data/${Port}/mysql.sock"
Mysql_Check=`lsof -i :$Port|wc -l`
. /etc/init.d/functions 

fun_Start_Mysql()
{
    if [ ! -e "$Mysql_Sock" ];then
      printf "Starting MySQL...\n"
      /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${Port}/my.cnf 2>&1 > /dev/null &
      sleep 2
        if [ -e "$Mysql_Sock" ];then
            action "Start Mysql $Port ..."    /bin/true
        else
            action "Start Mysql $Port ..."    /bin/false
        fi
  else
      action "Start Mysql $Port ..."   /bin/false
      printf "MySQL $Port  is running...\n"
      exit
    fi
}

fun_Stop_Mysql()
{
    if [ ! -e "$Mysql_Sock" ];then
        action "Stop Mysql $Port ..." /bin/false
        printf "MySQL is stopped ...\n"
       exit
    else
       printf "Stoping MySQL...\n"
       ${CmdPath}/mysqladmin -u ${Mysql_User} -p${Mysql_Pwd} -S /data/${Port}/mysql.sock shutdown
       if [ ! -e "$Mysql_Sock" ];then
            action "Stop Mysql $Port ..."  /bin/true
       else
           action "Stop Mysql $Port ..."  /bin/false
       fi
   fi
}

fun_Restart_Mysql()
{
    printf "Restarting MySQL...\n"
    fun_Stop_Mysql
    sleep 2
    fun_Start_Mysql
}
fun_Status_Mysql() {
    if [ "$Mysql_Check" -eq 0 ];then
        printf "Mysql $Port is stopped...\n"
    else
        printf "Mysql $Port is running...\n"
        lsof -i :$Port|awk 'NR>=2 {print}'
    fi

}

case $1 in
start)
    fun_Start_Mysql
;;
stop)
    fun_Stop_Mysql
;;
restart)
    fun_Restart_Mysql
;;
status)
    fun_Status_Mysql
;;
*)
    printf "Usage: /data/${port}/mysql {start|stop|status|restart}\n"
esac

初始化多实例

#这里初始化两个数据库实例 ,一个3306,一个3307  Mysql多实例安装在/data下,使用端口好区分.
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql

chown -R mysql.mysql /data/
find /data -type f -name mysql|xargs chmod 700

启动数据库
Mysql 5.5.49 多实例安装_第1张图片

修改数据库密码

[root@MySql-5 ~]# mysqladmin -S /data/3306/mysql.sock password redhat

登录数据库
Mysql 5.5.49 多实例安装_第2张图片

数据库基本安全优化

[root@MySql-5 ~]# mysql -S /data/3306/mysql.sock -u root -predhat
mysql> select user,host from mysql.user;
+------+--------------+
| user | host         |
+------+--------------+
| root | 127.0.0.1    |
| root | ::1          |
|      | localhost    |
| root | localhost    |
|      | mysql-5.5.49 |
| root | mysql-5.5.49 |
+------+--------------+
6 rows in set (0.00 sec)

mysql>  drop user ""@'mysql-5.5.49';
Query OK, 0 rows affected (0.03 sec)

mysql> drop user ""@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql>  drop user "root"@'::1';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from mysql.user;
+------+--------------+
| user | host         |
+------+--------------+
| root | 127.0.0.1    |
| root | localhost    |
| root | mysql-5.5.49 |
+------+--------------+
3 rows in set (0.00 sec)

mysql>

你可能感兴趣的:(Mysql)