本文作者系马哥linux学员云中鹤。
目录
一、基本概念
1、MySQL多实例
就是在一台机器上面开启多个不同的端口,运行多个MySQL服务进程。这些MySQL多实例公用一套安装程序,使用不同的(也可以是相同的)配置文件,启动程序,数据文件。在提供服务时候,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得相关硬件资源的多少。
2、应用场景
1).采用了数据伪分布式架构的原因,而项目启动初期又不一定有那多的用户量,为此先一组物理数据库服务器,但部署多个实例,方便后续迁移
2).为规避mysql对SMP架构不支持的缺陷,使用多实例绑定处理器的办法,把不同的数据库分配到不同的实例上提供数据服务
3).一台物理数据库服务器支撑多个数据库的数据服务,为提高mysql复制的从机的恢复效率,采用多实例部署
4).已经为双主复制的mysql数据库服务器架构,想部分重要业务的数据多一份异地机房的热备份,而mysql复制暂不支持多主的复制模式,且不给用户提供服务,为有效控制成本,会考虑异地机房部署一台性能超好的物理服务器,甚至外加磁盘柜的方式,为此也会部署多实例;
5).传统游戏行业的MMO/MMORPG,以及Web Game,每一个服都对应一个数据库,而可能要做很多数据查询和数据订正的工作,为减少维护而出错的概率,也可能采用多实例部署的方式,按区的概念分配数据库;
3、作用与问题
1).有效利用服务器的资源,单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。
2).资源互相争抢问题,比如 内存 ,cpu 需要开启 numa,并把 mysql 绑定到固定的核心上,网卡的中断请求,资源争用,最重要的是磁盘 IO
MySQL多实例配置方法
1.单一配置文件
2.多配置文件。
二、实战步骤:
1、同步时间
2、准备mysql依赖包
3、环境准备
3.1添加mysql用户
3.2编译安装mysql
4、安装MySQL多实例
5、准备配置文件
6、启动MySQL
7、登录mysql与一些安全措施
8、关闭MySQL
9,、提供简易管理脚本
10、为mysql的root用户创建密码
11、附,多配置文件安装mysql多实例,这里增加mysql 的3309端口
12、总结
1、同步时间
yum install epel*ntp 202.120.2.101yum install -y ntpntpdate 202.120.2.101hwclock -w
2、准备mysql依赖包
yum install -y autoconf* automake* zlib* libxml* ncurses-devel* libgcrypt* libtool* openssl*yum install cmake -y
3、环境准备
3.1添加mysql用户
groupadd mysqluseradd -g mysql mysql mkdir -pv /data/{3306,3307,3308}/datachown -R mysql.mysql /data/cd /usr/local/src/
3.2编译安装mysql
tar -xf mysql-5.5.45.tar.gzcd mysql-5.5.45chown mysql.mysql -R .cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_DATADIR=/data \-DSYSCONFDIR=/etc \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_READLINE=1 \-DWITH_SSL=system \-DWITH_ZLIB=system \-DWITH_LIBWRAP=0 \-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_cigmakemake install
4、安装MySQL多实例
cd
/usr/local/mysql/
scripts
/mysql_install_db
--user=mysql --basedir=
/usr/local/mysql
--datadir=
/data/3306/
scripts
/mysql_install_db
--user=mysql --basedir=
/usr/local/mysql
--datadir=
/data/3307/
scripts
/mysql_install_db
--user=mysql --basedir=
/usr/local/mysql
--datadir=
/data/3308/
5、准备配置文件
mysqld_multi --example > /data/multi.cnf #提供多配置文件模板
vim /data/multi.cnf #修改模板,这里比较简易[mysqld_multi]mysqld = /usr/local/mysql/bin/mysqld_safemysqladmin = /usr/local/mysql/bin/mysqladminuser = root #这个用户应该有关机权限,然后没有其他的权限。建议创建一个通用的,multi_admin用户控制其它的MySQL用户,这里有个例子#GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'password' [mysqld1]socket = /tmp/mysql.sock1port = 3306pid-file = /data/3306/mysql.piddatadir = /data/3306/data [mysqld2]socket = /tmp/mysql.sock2port = 3307pid-file = /data/3307/mysql.piddatadir = /data/3307/data#language = /usr/local/mysql/share/mysql/english#user = unix_user1 [mysqld3]#mysqld = /path/to/mysqld_safe#ledir = /path/to/mysqld-binary/#mysqladmin = /path/to/mysqladminsocket = /tmp/mysql.sock3port = 3308pid-file = /data/3308/mysql.piddatadir = /data/3308/data#language = /usr/local/mysql/share/mysql/swedish#user = unix_user2
以上是简易的配置文件。这个配置文件只能让MySQL启动起来。
6、启动MySQL
mysqld_multi --defaults-file=/data/multi.cnf start 1,2,3ss -tnl #查看监听端口LISTEN 0 50 *:3306 *:* LISTEN 0 50 *:3307 *:* LISTEN 0 50 *:3308 *:*
7、登录mysql与一些安全措施
mysql -S /tmp/mysql.sock1 #指定socket登录
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test |+--------------------+4 rows in set (0.01 sec) mysql> drop database test;Query OK, 0 rows affected (0.04 sec) mysql> select User,Host from mysql.user;+------+-----------+| User | Host |+------+-----------+| root | 127.0.0.1 || root | ::1 || | localhost || root | localhost || | node1 || root | node1 |+------+-----------+6 rows in set (0.01 sec) mysql> delete from mysql.user where User='';Query OK, 2 rows affected (0.00 sec) mysql> delete from mysql.user where Host='::1';Query OK, 1 row affected (0.00 sec) mysql> delete from mysql.user where Host='node1';Query OK, 1 row affected (0.00 sec)
其余的操作类似,就不在演示
8、关闭MySQL
mysqladmin -S /tmp/mysql.sock1 shutdown 建议使用musqld_multi --defaults-file stop [#,#]killall mysqld 不建议使用
9,、提供简易管理脚本
#!/bin/bash#basedir=/usr/local/mysqlbindir=/usr/local/mysql/binconf=/data/multi.cnfexport PATH=$bindir:/$PATHif test -x $bindir/mysqld_multi then mysqld_multi="$bindir/mysqld_multi"; else echo "Can't execute $bindir/mysqld_multi from dir $basedir"; exit; ficase "$1" in 'start' ) "$mysqld_multi" --defaults-extra-file=$conf start $2 ;; 'stop' ) "$mysqld_multi" --defaults-extra-file=$conf stop $2 ;; 'report' ) "$mysqld_multi" --defaults-extra-file=$conf report $2 ;; 'restart' ) "$mysqld_multi" --defaults-extra-file=$conf stop $2 "$mysqld_multi" --defaults-extra-file=$conf start $2 ;; *) echo "Usage: $0 {start|stop|report|restart}" >&2 ;; esac
10、为mysql的root用户创建密码
mysqladmin -uroot -S /tmp/mysql.sock2 password "123456" #指定socket文件位置即可
其余的操作一样
11、附,多配置文件安装mysql多实例,这里增加mysql 的3309端口
mkdir -pv /data/3309/data chown mysql.mysql -R 3309/cd /usr/local/mysqlscripts/mysql_install_db --datadir=/data/3309/data/ --user=mysql --basedir=/usr/local/mysql/cp support-files/my-small.cnf /data/3309/my.cnf
vim /data/3309/my.cnf[client]port = 3309 #这里也需要注意下吧socket = /tmp/mysql.sock4 [mysqld]port = 3309 #注意端口socket = /tmp/mysql.sock4 #注意socketskip-external-lockingkey_buffer_size = 16Kmax_allowed_packet = 1Mtable_open_cache = 4sort_buffer_size = 64Kread_buffer_size = 256Kread_rnd_buffer_size = 256Knet_buffer_length = 2Kthread_stack = 128Kdatadir=/data/3309/data #注意datadirserver-id = 1 [mysqldump]quickmax_allowed_packet = 16M
mysqld_safe --defaults-file=/data/3309/my.cnf 2&1> > /dev/null #启动mysqld
ss -tnl | grep 330 #查看端口LISTEN 0 50 *:3306 *:* LISTEN 0 50 *:3307 *:* LISTEN 0 50 *:3308 *:* LISTEN 0 50 *:3309 *:*
其余启动方法与关闭方法类似
12、总结:
1).通过这次mysql多实例安装,我们已经可以根据自己的喜好决定是通过多配置文件安装mysql多实例,还是但配置单文件安装。
2).过程比较简单,也没有什么特别高明的技巧,但是由小见大,以后配置文件可以在完善完善。
3).就是下面还会用心的写一系列的mysql博客,希望高手指点,不胜感激
参考链接:http://freeloda.blog.51cto.com/2033581/1349312