一、安装MySQL。步骤请参考安装文档
安装完mysql之后先不要进行初始化。在配置完双实例之后再进行数据库的初始化。
二、双实例配置
1、创建实例的数据目录
mkidr -p /data/3306/data mkidr -p /data/3307/data mkdir -p /data/3306/binlog chown -R mysql:mysql /data
2、添加环境变量
echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile # 如果系统自带mysql或者没卸载感觉,path写的顺序有可能出现问题 source /etc/profile
3、编写两个实例的配置文件
################### 3306实例的配置文件 ############################
[client] port = 3306 socket = /data/3306/mysql.sock [mysqld] port = 3306 socket = /data/3306/mysql.sock basedir = /usr/local/mysql datadir = /data/3306/data open_files_limit = 1024 pid-file = /data/3306/mysqld.pid log-bin = /data/3306/binlog/mysqld-bin expire_logs_days = 7 server-id = 1 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error = /data/3306/mysql3306.err #提前创建,否则初始化报错 pid-file = /data/3306/mysqld.pid
################### 3307实例的配置文件 ############################
[client]
port = 3307
socket = /data/3307/mysql.sock
[mysqld]
port = 3307
socket = /data/3307/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3307/data
open_files_limit = 1024
pid-file = /data/3307/mysqld.pid
# log-bin = /data/3307/binlog/mysqld-bin
# expire_logs_days = 7
server-id = 3
[mysqldump]
quick
max_allowed_packet = 2M
[mysqld_safe]
log-error = /data/3307/mysql3307.err
pid-file = /data/3307/mysqld.pid
###################################################################
4、编写自定义启动脚本,即自定义mysqld。模板为3306实例的服务,3307的请自行修改。修改成属主mysql。可执行权限
#!/bin/bash # # # #init port=3306 mysql_user="root" mysql_pwd="111111" CmdPath="/usr/local/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_start_mysql(){ if [ ! -e "$mysql_sock" ];then printf "Starting MySQL... " /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 >/dev/null & else printf "MySQL is running ... " exit fi } #stop function function_stop_mysql(){ if [ ! -e "$mysql_sock" ];then printf "MySQL is stopped ... " exit else printf "Stopping MySQL ... " ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown fi } #restart function function_restart_mysql(){ printf "Restarting MySQL ... " 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} " esac
5、对两个实例进行初始化(初始化的过程会生成两个临时的密码。需要记住以方便后边登陆并对密码进行修改)
cd /usr/local/mysql ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data/ ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data/
6、启动双实例
./data/3306/mysqld start ./data/3307/mysqld start
7、查看连个端口的运行状态
netstat -tunlp | grep 330*
[root@mysql2 3306]# netstat -tunlp|grep 330* tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1331/sshd tcp 0 0 :::3307 :::* LISTEN 58215/mysqld tcp 0 0 :::22 :::* LISTEN 1331/sshd tcp 0 0 :::3306 :::* LISTEN 57820/mysqld
8、登陆两个实例并配置数据库
mysql -u root -p -S /data/3307/mysql.sock mysql -u root -p -S /data/3307/mysql.sock # 分别执行 SET PASSWORD = PASSWORD("new password"); ALTER USER ‘root’@‘localhost’ PASSWORD EXPIRE NEVER; flush privileges;
9、双实例配置完成,如果要增加实例。按照上述步骤继续添加即可
多实例的优点:
(1)、有效利用服务器资源。当单个服务器资源过剩时,可以充分利用剩余的资源提供更多的服务
(2)、节约服务器资源,当公司资金紧张,但数据库又需要数据库之间各自提供服务时,并且还想使用主从同步等技术,此时多实例就再好不过了
(3)、方便后期架构扩展,某个项目才启动时,启动初期并不一定有很大的用户量,因此可以先用一组物理数据库服务器,在上面部署多个实例,方便后续架构扩展、迁移
多实例的缺点:
(1)、资源互相抢占问题当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU和IO资源,这将导致服务器上的其它实例提供服务的质量下降。这就比如说合租房的各个租客,每当早晨上班时,都会洗漱,此时卫生间的占用率就大,各个租客总会发生等待。