mysql多实例安装

1 环境准备

1.1 系统环境

[root@db02 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@db02 ~]# uname -r
2.6.32-696.el6.x86_64
[root@db02 ~]# uname -m
x86_64

1.2 主机名及IP

[root@db02 ~]# hostname
db02
[root@db02 ~]# ifconfig eth0|awk -F "[ :]+" 'NR==2 {print$4}'
10.0.0.52

1.3 关闭安全机制

[root@db02 ~]# /etc/init.d/iptables stop
[root@db02 ~]# setenforce 0
[root@db02 ~]# sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/sysconfig/selinux

1.4 目录规划

[root@db02 ~]# mkdir -p /application/tools/  ==
》软件包存放目录


2 安装mysql多实例

2.1 安装mysql所需的依赖包和编译软件

[root@db02 ~]# yum install -y ncurses-devel  libaio-devel
[root@db02 ~]# rpm -qa ncurses-devel  libaio-devel
[root@db02 ~]# yum install cmake -y

2.2 创建mysql管理用户

[root@db02 ~]# useradd mysql -s /sbin/nologin -M

2.3 现在mysql-5.5.5的源码包并解压

[root@db02 ~]# cd /application/tools/
[root@db02 tools]# wget -q http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.55.tar.gz
[root@db02 tools]# tar xf mysql-5.5.55.tar.gz
[root@db02 tools]# ls
mysql-5.5.55  mysql-5.5.55.tar.gz

2.4 编译安装

[root@db02 tools]# cd mysql-5.5.55
[root@db02 tools]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.5 \
-DMYSQL_DATADIR=/application/mysql-5.5.55/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.55/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 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0
[root@db02 mysql-5.5.55]# make && make install
[root@db02 mysql-5.5.55]# ln -s /application/mysql-5.5.5/ /application/mysql
[root@db02 mysql-5.5.55]# ll /application/mysql
lrwxrwxrwx. 1 root root 25 5月  30 20:48 /application/mysql -> /application/mysql-5.5.5/

2.5 创建多实例的文件数据存放目录

[root@db02 ~]# mkdir -p /data/{3306,3307}/data

2.6 创建mysql多实例的配置文件

[root@db02 ~]# vim /data/3306/my.cnf
[root@db02 ~]# cat /data/3306/my.cnf
[client]
port        = 3306
socket            =/data/3306/mysql.sock
default-character-set = utf8
[mysql]
no-auto-rehash
 
[mysqld]
user        = mysql
port        = 3306
socket      = /data/3306/mysql.sock
basedir     = /application/mysql
datadir           = /data/3306/data
character_set_server = utf8
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
thread_stack    = 192K
tmp_table_size       = 2M
max_heap_table_size            = 2M
long_query_time           = 1
pid-file    = /data/3306/mysql.pid
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
key_buffer_size             = 16M
read_buffer_size     = 1M
read_rnd_buffer_size     = 1M
bulk_insert_buffer_size         = 1M
lower_case_table_names        = 1
skip-name-resolve
slave-skip-errors            = 1032,1062
replicate-ignore-db        = mysql
 
server-id         = 3
 
innodb_additional_mem_pool_size              = 32M
innodb_buffer_pool_size              = 32M
innodb_data_file_path    = ibdatal: 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_oldboy3306.err
pid-file = /data/3306/mysqld.pid
======================================================================
[root@db02 ~]# vim /data/3307/my.cnf
[root@db02 ~]# cat /data/3307/my.cnf
[client]
port        = 3307
socket            =/data/3307/mysql.sock
default-character-set = utf8
[mysql]
no-auto-rehash
 
[mysqld]
user        = mysql
port        = 3307
socket      = /data/3307/mysql.sock
basedir     = /application/mysql
datadir           = /data/3307/data
character_set_server = utf8
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
thread_stack    = 192K
tmp_table_size       = 2M
max_heap_table_size            = 2M
long_query_time           = 1
pid-file    = /data/3307/mysql.pid
relay-log = /data/3307/relay-bin
relay-log-info-file         = /data/3307/relay-log.info
binlog_cache_size          = 1M
max_binlog_cache_size  = 1M
max_binlog_size           = 2M
key_buffer_size             = 16M
read_buffer_size     = 1M
read_rnd_buffer_size     = 1M
bulk_insert_buffer_size         = 1M
lower_case_table_names        = 1
skip-name-resolve
slave-skip-errors            = 1032,1062
replicate-ignore-db        = mysql
 
server-id         = 3
 
innodb_additional_mem_pool_size              = 32M
innodb_buffer_pool_size              = 32M
innodb_data_file_path    = ibdatal: 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/3307/mysql_oldboy3307.err
pid-file = /data/3307/mysqld.pid

2.7 创建mysql多实例启动文件

[root@db02 ~]# vim /data/3306/mysql
#!/bin/sh
#####################################################
#This  scripts  is created by LZH at 2018-05-28
#QQ:13613871003
#blog:http://blog.51cto.com/lzhnb
####################################################
#init
port=3306
mysql_user="root"
mysql_pwd="123456"
mysql_sock="/data/${port}/mysql.sock"
CmdPath="/application/mysql/bin"
#startup function
function_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 &
       else
         printf "MySQL is running...\n"
         exit
       fi
}
 
#stop function
function_stop_mysql()
{
       if [ ! -e "$mysql_sock" ];then
         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
       fi
}
 
#restart function
function_restart_mysql()
{
       printf "Restarting MySQL...\n"
       function_stop_mysql
       sleep 2
       function_start_mysql
}
 
case $1 in
start)
       function_start_mysql
;;
stop)
       function_stop_mysql
;;
restart)
       function_restart_mysql
;;
*)
       printf "Usage: /data/{$port}/mysql {start|stop|restart}\n"
esac
###############################################################################
[root@db02 ~]# vim  /data/3307/mysql
#!/bin/sh
#####################################################
#This  scripts  is created by LZH at 2018-05-28
#QQ:13613871003
#blog:http://blog.51cto.com/lzhnb
####################################################
#init
port=3307
mysql_user="root"
mysql_pwd="123456"
mysql_sock="/data/${port}/mysql.sock"
CmdPath="/application/mysql/bin"
#startup function
function_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 &
       else
         printf "MySQL is running...\n"
         exit
       fi
}
 
#stop function
function_stop_mysql()
{
       if [ ! -e "$mysql_sock" ];then
         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
       fi
}
 
#restart function
function_restart_mysql()
{
       printf "Restarting MySQL...\n"
       function_stop_mysql
       sleep 2
       function_start_mysql
}
 
case $1 in
start)
       function_start_mysql
;;
stop)
       function_stop_mysql
;;
restart)
       function_restart_mysql
;;
*)
       printf "Usage: /data/{$port}/mysql {start|stop|restart}\n"
esac

2.9 配置mysql多实例文件的权限

[root@db02 ~]# chown -R mysql.mysql /data/
[root@db02 ~]# ll /data/
drwxr-xr-x. 3 mysql mysql 4096 5月  30 21:38 3306
drwxr-xr-x. 3 mysql mysql 4096 5月  30 21:31 3307

2.10 拷贝环境变量

[root@db02 ~]# cp -rf /application/mysql/bin/* /usr/local/sbin/

2.11 初始化mysql多实例数据库文件

[root@db02 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data/ -
-user=mysql
[root@db02 scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data/ --user=mysql

2.12 启动mysql数据库

[root@db02 scripts]# /data/3306/mysql start
[root@db02 scripts]# /data/3307/mysql start
[root@db02 scripts]# netstat -tunlp |grep 33
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      24995/mysqld       
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      23488/mysqld

2.13 连接mysql数据库测试

[root@db02 scripts]# mysql -S /data/3306/mysql.sock
[root@db02 scripts]# mysql -S /data/3307/mysql.sock
3 mysql多实例

3.1 mysql多实例简介

 mysql多实例就是在一台服务器上同时开启多个不同的服务端口,同时运行多个mysql进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务

3.2 mysql多实例的作用与问题

3.2.1 mysql多实例的作用

q  有效利用服务器的资源

q  节约服务器资源

3.2.2 mysql多实例的问题

q  会存在资源相互抢占的问题

3.3 mysql多实例的应用场景

q  资金紧张型的公司

q  并发访问不是特别大的业务

q  门户网站应用mysql多实例

3.4 实际案例

sina网站的数据库单机1-4个数据库实例的居多,其中又数1-2个的最多,因为大业务占用的机器比较多服务器是DELLR510的居多,CPUE521048G内存,硬盘12*300G SAS,做raid10

sina网站在安装数据库的时候一般采用编译的安装方式,并且在做好优化后,做成rpm包,以便统一使用

4 错误解决

4.1 启动报错

4.1.1 报错信息

[root@db02 scripts]# 180530 21:26:30 mysqld_safe error: log-error set to '/data/3307/mysql_oldboy3307.err', 
however file don't exists. Create writable for user 'mysql'.


4.1.2 解决方法

[root@db02 ~]# touch /data/3307/mysql_oldboy3307.err
[root@db02 ~]# chown mysql.mysql /data/3307/mysql_oldboy3307.err

然后重新启动即可

5 数据库小结

5.1 数据库分类

q  关系型数据库和非关系型数据库

5.2 关系型数据库

q  是一张二维表格

q  市场占有量较大的是myqloracle,互联网运维最常用的是mysql

q  通过SQL结构化查询查询语言来存取、管理数据

q  保持数据一致性方面很强

q  常见的关系型数据库:mysql sql server mariadb  oracle 

5.3 非关系型数据库

5.3.1 非关系型数据库小结

q  非关系性数据库也被称为NoSQL数据库

q  NoSQL数据库不是对关系型数据库的否定,而是对关系型数据库的一个重要补充

q  NoSQL的典型产品memcached(纯内存)redis(持久话缓存)mongodb

q  NoSQL数据库为了高性能、高并发而生的

q  常见的非关系性数据库:memcached redis

5.3.2 非关系型数据库种类

q  键值(key-value)存储数据库,键值数据库的优点在于简单、易部署、高并发

典型产品:memcachedredismemcachedDB

q  列存储 (Column-oriented) 数据库

典型产品:CassandraHBase

q  面向文档(Document-Oriented)的数据库

典型产品:mongoDBCouchDB

q  图形(Graph)数据库

典型产品:Nco4JInfoGrid

5.4 常见的关系型数据库介绍

5.4.1 oracle

q  oracle的前身叫SDL,由LarryEllison和另外两个编程人员在1977年创办

q  1979年引入第一个商用SQL关系数据库管理系统

q  支持的操作系统平台最广泛

q  oracle公司是目前最大的数据库公司

q  主要应用范围:传统大企业、金融、政府、证券、大公司等

5.4.2 mysql        

q  mysql数据库是一个中小型数据库管理系统

q  广泛的应用在大中小型网站中

q  主要应用范围:互联网领域、大中小网站、游戏公司、电商平台等

5.4.3 SQL Server

q  是微软公司开发的大型关系型数据库管理系统

q  SQL Server的功能比较全面、效率高,可以作为中型企业或者单位的数据库平台

q  缺点是只能在windows下运行

5.4.4 Access

q  Access是入门级小型桌面数据库,性能安全性都一般,可供个人管理或者小型网站使用

q  界面友好、易学易用、开发简单、接口灵活等特点,是典型的新一代桌面关系型数据库管理系统

q  完善的管理各种数据库对象、具有强大的数据组织、用户管理、安全检查等功能

q  强大的数据处理功能

5.5 常见非关系型数据库介绍

5.5.1 memcached

q  是一个开源的、高性能的、具有分布式内存对象的缓存系统,通过他可以减轻数据库负载

q  memcached为纯内存缓存软件,一旦重启所有数据就会全丢失,为了解决这一问题,memcached开发了一个开源的项目memcachedDB,通过为memcached增加Berkeley DB持久化存储机制和异步主辅复制机制,使memcached具备了事物恢复能力、持久化数据库存储能力和分布式复制能力

q  memcachedb非常适合需要高性能读写速度、持久化保存的应用场景,但是最近几年逐渐别redis取代

5.5.2 redis

q  redis数据都是缓存在内存中,但是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件中

q  支持内存缓存,这个功能相当于memcached

q  支持持久化存储,这个功能相当于memcachedbttserver

q  数据类型更丰富比其他key-value库功能更强

q  支持主从集群、分布式

q  支持队列等特殊功能

5.5.3 mongodb

q  mongodb是一种介于关系型数据库和非关系型数据库之间的产品

q  mongodb的数据结构非常松散,类似jsonbjson格式

q  mongodb的最大特点是查询语言非常强大

q  面向结合存储,易存储对象类型的数据

q  模式自由

q  支持动态查询

q  支持完全索引、包含内部对象

q  支持查询、支持故障恢复和检查

q  使用高效的二进制数据存储,包括大型对象(视频)

q  自动处理碎片,以支持云计算层次的扩展软件

5.6 数据库发展历史大事记

q  1951: Univac 系统使用磁带和穿孔卡片作为数据存储

q  1956: IBM 公司在其Model 305 RAMAC中第一次引入了磁盘驱动器。

q  1961:通用电气(GE)公司的Charles Bachman开发了第一个数据库管理系统IDS.

q  1969: E.F.Codd 发明了关系数据库。。

q  1973;John J.Cullinane 领导Cullinane公司开发了针对IBM主机的基于网络模型的数据库IDMS

q  1976: Honeywell公司推出了第一个商用关系数据库产品Multics Relational Data Storee1979: Oracle 公司引入了第一个商用SQL关系数据库管理系统。。1983: IBM推出了DB2数据库产品

q  1985:Procter & Gamble系统设计的第一个商务智能系统产生

q  1991: W.H.“Bill”Inmon 发表了构建数据仓库