我们前面已经做了MySQL数据库的介绍以及为什么选择MySQL数据库,最后介绍了MySQL数据库在Linux系统下的多种安装方式,以及讲解了MySQL的二进制方式单实例安装、基础优化等,下面给大家讲解更为实用的MySQL多实例安装、主从复制集群等重要应用实践。
1.1什么是MySQL多实例?
这些MySQL多实例共用一套MySQL安装程序,使用不同(也可以相同)的my.cnf配置文件、启动程序、数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得服务器的相关硬件资源多少。
作个比喻,MySQL多实例相当于房子的多个卧室一样,每个实例可以看作一个卧室,整个服务器就是一套房子,服务器的硬件资源(Cpu、Mem、Disk)可以看作房子的卫生间、厨房、客厅一样、是房子的公用资源、北漂蜗居在一起,肯定要共用上述资源。
注意:其实很多服务器都可以由多实例,甚至在门户网站用的很广泛,例如Nginx,Apache、Haproxy、Redis、Memcached,都可以多实例。
1.2MySQL多实例的作用与问题
q 有效利用服务器资源
当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。
q 节约服务器资源
当公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且,需要主从复制等技术时,多实例就再好不过了。
MySQL多实例有它的好处,但也有其弊端,比如:会存在资源互相枪占的问题。
q 资源互相枪占问题
当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。
2.MySQL多实例生产应用场景
2.1资金紧张型公司的选择
当公司业务访问量不太大,又不舍得花钱,但又希望不同业务的数据库服务各自尽量独立的听过服务互相不受影响,而且,需要主从同步进行等技术提供备份或读写分离服务,多实例就再好不过了。如:可以通过3台服务器部署6-9个实例,交叉做主从同步备份及读写分离,实现6-9台服务器才有的效果。这里要强调的是,所谓的尽量独立是相对的。
2.2并发访问不是特别大的业务
当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这时就很适合多实例的应用,如果对SQL语句优化做的比较好,MySQL多实例一个很值得使用的技术,即使并发很大,合理分配好系统资源,也不会有太大问题。
2.3门户网应用MySQL多实例场景
百度搜索引擎的数据库就是多实例,一般是从库,48核,内存96G,跑3-4个实例,sina网也是用的多实例,内存48G左右。门户网站使用多实例的目的是配硬件好的服务器节省IDC机柜空间,同时,跑多实例让硬件资源不浪费。
多实例MySQL详细步骤
1.1建立MySQL多实例的条件
1、安装好MySQL安装依赖的包
yum -y install ncurses-devel
yum -y install libaio-devel
2、选择二进制方式安装MySQL5.5,或者源码编译安装MySQL
1.2建立MySQL账号
首先以root身份登录到linux系统中,然后执行如下命令创建mysql组及用户
[root@mysql ~]# groupadd mysql
[root@mysql ~]# useradd -s /sbin/nologin -g mysql -M mysql
Useradd命令参数简要说明:
#1、-s /sbin/nologin 表示禁止该用户登录,加强安全。
#2、-g mysql 指定属于mysql组
#3、-M表示不创建用户家目录
1.3下载MySQL软件
通过rz或sftp等命令从本地上传mysql软件包到linux服务器
[root@mysql ~]# mkdir -p /application/tools/ ß建立存放mysql软件包的目录
[root@mysql ~]# cd /application/tools/ ß进入软件包目录
[root@mysql tools]# ll mysql-5.5.32-linux2.6-x86_64.tar.gz ß查看上传软件包
-rw-r--r-- 1 root root 186722932 Jun 20 2013 mysql-5.5.32-linux2.6-x86_64.tar.gz
1.4安装MYSQL软件
1、解压软件包,移动到规范的软件安装目录下
2、生成不带版本号的软链接/application/mysql,即mysql安装路径。
[root@mysql tools]# tar xf mysql-5.5.32-linux2.6-x86_64.tar.gz ß解包
[root@mysql tools]# mv mysql-5.5.32-linux2.6-x86_64 /application/ß移动到规范的软件安装目录下
[root@mysql tools]#ln -s /application/mysql-5.5.32/ /application/mysql ß生成不带版本链接/application/mysql,即mysql安装路径
1.5创建MySQL多实例的数据文件目录
[root@mysql ~]# mkdir -p /data/{3306,3307}/data ß上传相关mysql多实例的目录
/data/ ß总的多实例根目录
|-- 3306 ß3306实例的目录
| |-- data ß3306实例的数据文件目录
| |-- my.cnf ß3306实例配置文件
| `-- mysql ß3306实例的启动脚本
`-- 3307 ß3307实例的目录
|-- data ß3307实例的数据文件目录
|-- my.cnf ß3307实例配置文件
`-- mysql ß3307实例的启动脚本
提示:
1、mkdir -p /data/{3306,3307}/data相当于mkdir -p /data/3306/data; mkdir -p /data/3307/data两条命令。
2、如果是创建多个目录可以增加,如33008、3309,一般生产环境中2-3个实例就可以了。
生产硬件配置:MEM 32g、双8核、磁盘6*600g、sas15k、2-3个实例。
1.6配置MySQL多实例的文件权限
[root@mysql ~]# find /data/ -name mysql|xargs chmod 700 ß授权mysql多实例服务所有启动文件mysql可执行
[root@mysql ~]# find /data/ -name mysql|xargs ls -l ß检查是否授权成功
-rwx------ 1 mysql mysql 1307 Jul 15 2013 /data/3306/mysql
-rwx------ 1 mysql mysql 1307 Jul 21 2013 /data/3307/mysql
1.7初始MySQL多实例的数据库文件
1、初始化命令为:
[root@mysql ~]# /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data/ --user=mysql ß初始3306数据库
[root@mysql ~]# /application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data/ --user=mysql ß初始3307数据库
2、为什么要初始化数据库?
初始化的主要目的就是创建基础的数据库文件,例如:生成mysql库表等。
初始化后/data/{3306,3307}/data目录下就会有mysql等数据文件。
1.9授权MySQL多实例目录
[root@mysql ~]# chown -R mysql.mysql /data/ ß授权mysql用户和组管理整个多实例目录/data
1.8配置MySQL命令全局使用路径
q 配置全局路径意义
如果不配置全局路径,就无法直接敲mysql等命令,也就是/application/mysql/bin/mysql
q 配置mysql路径方法
[root@mysql ~]# echo 'export PATH=/application/mysql/bin:$PATH' >/etc/profile.d/mysqld.sh
1.9启动MySQL多实例数据库
1、MySQL安装完成后,默认情况下,管理员账号root是无密码的。登录不同库需要指定不同库的sock路径,这个是在my.cnf里指定的。
启动数据库
[root@mysql ~]# /data/3306/mysql start ß启动3306mysql实例
[root@mysql ~]# /data/3307/mysql start ß启动3307mysql实例
关闭数据库,停止数据库需要密码(如果有密码,需要在脚本里面更改密码,否则报错)
[root@mysql ~]# /data/3306/mysql stop ß关闭3306 mysql实例
[root@mysql ~]# /data/3306/mysql stop ß关闭3307 mysql实例
连接数据库
[root@mysql ~]# mysql -S /data/3306/mysql.sock ß通过指定sock来启动3306实例
[root@mysql ~]# mysql -S /data/3307/mysql.sock ß通过指定sock来启动3307实例
1.10创建MySQL多实例的启动文件
多实例启动mysql服务实质,就是指定配置文件,通过mysqld_safe命令启动
[root@mysql ~]# /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &
[root@mysql ~]# /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &
多实例停止mysql服务实质,指定sock,通过mysqladmin来shutdonwn,或者通过kill
[root@mysql ~]# /application/mysql/bin/mysqladmin -uroot -poldboy -S /data/3306/mysql.sock shutdown
[root@mysql ~]# /application/mysql/bin/mysqladmin -uroot -poldboy -S /data/3307/mysql.sock shutdown