mysql部署多实例
一、安装⽅式有如下⼏种
1、⼆进制安装(软件包名字较⻓、带有版本号、平台信息、等) 源代码已经被编译过,下载、解压后,可以直接在对应的系统平台上运⾏
二进制包⽐较⼤,使⽤⽐较简单。 如 mysql-5.0.45-linux-x86_64-glibc23.tar.gz/
2、源代码安装(软件包基本只是⼀个携带版本号的tar包)
需要在机器上重新编译安装,时间较久,对于系统环境依赖性⽐较重 如 mysql-5.0.45.tar.gz
3、RPM包安装
rpm是红帽的⼀个软件包管理系统
rpm包也是⼆进制包的⼀种,但是也分为两种
(1)源码rpm包,源代码被打包成了rpm格式(看不到源代码了,tar包可以看 到源代码),还得重新编译 rpmbuild --rebuil
如 name-version-release.arch.src.rpm
(2)⼆进制rpm包,可以直接安装rpm包使⽤
如 name-version-release.arch.rpm
二、rpm和源码的优缺点
RPM包优点:
1)RPM包管理简单,只需要通过⼏个简单的命令就可以实现软件包的 安装升级卸载和查询
2)安装速度⽐源码包形式快(源码包主要是make编译花费时 间较⻓)
RPM包缺点:
1)RPM包是事先已经经过编译的⼆进制包,可以直接安装使⽤,因此 ⽆法再看到源码
2)如上所述,功能已经被固定,⽆法灵活的删除或新增功能
3) RPM包存在很强的依赖性,⼤部分RPM包的顺利安装需要安装很多个依赖RPM包
4)卸 载软件包的时候,如果不⼩⼼,会卸载涉及到依赖关系,很有可能就会卸载移除掉系 统所需软件,导致系统奔溃 对于已经编译成⼆进制的rpm包,由于操作系统环境不同,⼀般不能混⽤。
三、⼆进制安装mysql
这⾥我们可以采⽤⼆进制⽅式,安装mysql,源码编译,前⾯已经讲过了 下载地址,依然是http://mirrors.sohu.com/mysql/MySQL-5.6/
1、获取二进制源码包
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
2、安装依赖,之前安装过的就可以略过
3、环境的清理
(1)在/etc/profile文件中,把路径注释掉
(2)停止当前linux的mysql(如果存在mysql端口)
[root@localhost tools]# /etc/init.d/mysqld stop
4、创建mysql用户,如果存在就直接用就可以了
[root@localhost tools]# id mysql
uid=1001(mysql) gid=1001(mysql) 组=1001(mysql)
[root@localhost tools]#
5、准备好mysql的多实例目录
[root@localhost tools]# mkdir -p /my_mysql/{3306,3307}
[root@localhost tools]# tree /my_mysql/
/my_mysql/
├── 3306
└── 3307
2 directories, 0 files
[root@localhost tools]#
6、解压缩二进制的mysql的软件包
[root@localhost tools]# tar -zxvf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz -C /application/
7、查看mysql的安装包信息
[root@localhost /]# ls /application/
mysql mysql-5.6.40 mysql-5.6.40-linux-glibc2.12-x86_64
[root@localhost /]#
准备二进制mysql运行所需的环境
1、准备mysql多实例的,各个配置文件
(1)3306的配置文件:
[root@localhost /]# cd /my_mysql/3306
[root@localhost 3306]# pwd
/my_mysql/3306
[root@localhost 3306]# vim my.cnf
[root@localhost 3306]# cat my.cnf
[client]
[mysqld]
port=3306
socket=/my_mysql/3306/mysql.sock
basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/
datadir=/my_mysql/3306/data
log-bin=/my_mysql/3306/mysql-bin
server-id=1
[mysqld_safe]
log-error=/my_mysql/3306/mysql_3306_error.log
pid-file=/my_mysql/3306/mysqld_3306.pid
[root@localhost 3306]#
(2)3307的配置文件:
[root@localhost 3307]# cat my.cnf
[client]
[mysqld]
port=3307
socket=/my_mysql/3307/mysql.sock
basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/
datadir=/my_mysql/3307/data
log-bin=/my_mysql/3307/mysql-bin
server-id=2
[mysqld_safe]
log-error=/my_mysql/3307/mysql_3307_error.log
pid-file=/my_mysql/3307/mysqld_3307.pid
[root@localhost 3307]#
2、准备各个启停管理脚本
(1)3306
3306下的脚本:
[root@localhost 3306]# vim mysql_3306
[root@localhost 3306]# cat mysql_3306
port=3306
mysql_user="mysql"
Cmdpath="/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/"
mysql_sock="/my_mysql/${port}/mysql.sock"
mysqld_pid_file_path=/my_mysql/${port}/mysqld_${port}.pid
start(){
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
/bin/sh ${Cmdpath}/mysqld_safe --defaults-file=/my_mysql/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
sleep 3
else
printf "MySQL is running...\n"
exit 1
fi
}
stop(){
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit 1
else
printf "Stoping MySQL...\n"
mysqld_pid=`cat "$mysqld_pid_file_path"`
if (kill -0 $mysqld_pid 2>/dev/null)
then
kill $mysqld_pid
sleep 2
fi
fi
}
restart(){
printf "Restarting MySQL...\n"
stop
sleep 2
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
printf "Usage: /data/${port}/mysql{start|stop|restart}\n"
esac
给3306赋予权限
[root@localhost 3306]# chmod +x mysql_3306
(2)3307
3307的启停脚本
[root@localhost 3307]# vim mysql_3307
[root@localhost 3307]# cat mysql_3307
port=3307
mysql_user="mysql"
Cmdpath="/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/"
mysql_sock="/my_mysql/${port}/mysql.sock"
mysqld_pid_file_path=/my_mysql/${port}/mysqld_${port}.pid
start(){
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
/bin/sh ${Cmdpath}/mysqld_safe --defaults-file=/my_mysql/${port}/my.cnf --pid-file=$mysqld_pid_file_path
2>&1 > /dev/null &
sleep 3
else
printf "MySQL is running...\n"
exit 1
fi
}
stop(){
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit 1
else
printf "Stoping MySQL...\n"
mysqld_pid=`cat "$mysqld_pid_file_path"`
if (kill -0 $mysqld_pid 2>/dev/null)
then
kill $mysqld_pid
sleep 2
fi
fi
}
restart(){
printf "Restarting MySQL...\n"
stop
sleep 2
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
printf "Usage: /data/${port}/mysql{start|stop|restart}\n"
esac
[root@localhost 3307]#
赋予脚本权限:
[root@localhost 3307]# chmod +x mysql_3307
[root@localhost 3307]#
3、用户、组授权
降低权限,把root改为mysql
[root@localhost 3307]# ls -l
总用量 8
-rw-r--r--. 1 root root 289 6月 14 13:52 my.cnf
-rwxr-xr-x. 1 root root 893 6月 14 14:11 mysql_3307
[root@localhost 3307]# chown -R mysql.mysql /my_mysql/
[root@localhost 3307]# ls -l
总用量 8
-rw-r--r--. 1 mysql mysql 289 6月 14 13:52 my.cnf
-rwxr-xr-x. 1 mysql mysql 893 6月 14 14:11 mysql_3307
[root@localhost 3307]#
4、PATH路径配置
[root@localhost 3307]# vim /etc/profile
[root@localhost 3307]#
export PATH=/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/:$PATH
[root@localhost 3307]# tail -2 /etc/profile
export PATH=/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/:$PATH
[root@localhost 3307]# echo $PATH
/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
5、创建多个实例对应的数据目录
[root@localhost 3307]# mkdir -p /my_mysql/3306/data
[root@localhost 3307]# mkdir -p /my_mysql/3307/data
[root@localhost 3307]# tree /my_mysql/
/my_mysql/
├── 3306
│ ├── data
│ ├── my.cnf
│ └── mysql_3306
└── 3307
├── data
├── my.cnf
└── mysql_3307
4 directories, 4 files
[root@localhost 3307]#
6、mysql的多实例初始化
先初始化3306的数据,此时3306的data目录是空的,没有数据,执行初始化,生成mysql运行所需的数据
[root@localhost 3307]# /application/mysql-5.6.40-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3306/my.cnf --basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3306/data/ --user=mysql
(必须出现两个OK!!!)
此时会正确生成mysql的初始化数据
[root@localhost 3307]# ls -l /my_mysql/3306/data/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 6月 14 14:46 ibdata1
-rw-rw----. 1 mysql mysql 50331648 6月 14 14:46 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 6月 14 14:46 ib_logfile1
drwx------. 2 mysql mysql 4096 6月 14 14:46 mysql
drwx------. 2 mysql mysql 4096 6月 14 14:46 performance_schema
drwx------. 2 mysql mysql 6 6月 14 14:46 test
[root@localhost 3307]#
同理,初始化3307,生成3307的数据
[root@localhost 3307]# ls -l /my_mysql/3307/data/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 6月 14 14:50 ibdata1
-rw-rw----. 1 mysql mysql 50331648 6月 14 14:50 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 6月 14 14:50 ib_logfile1
drwx------. 2 mysql mysql 4096 6月 14 14:50 mysql
drwx------. 2 mysql mysql 4096 6月 14 14:50 performance_schema
drwx------. 2 mysql mysql 6 6月 14 14:50 test
[root@localhost 3307]#
7、分别启动mysql的多实例
创建mysql的错误日志文件
[root@localhost 3307]# touch /my_mysql/3307/mysql_3307_error.log
[root@localhost 3307]# touch /my_mysql/3306/mysql_3306_error.log
[root@localhost 3307]# netstat -tunlp |grep mysql(确保没有mysql,生产环境例外)
[root@localhost 3307]#
(1)启动、登录3306数据库:
[root@localhost data]# /my_mysql/3306/mysql_3306 start
Starting MySQL...
[root@localhost data]# netstat -tunlp |grep mysql
tcp6 0 0 :::3306 :::* LISTEN 924/mysqld
使用sock套接字文件登录
[root@localhost data]# mysql -S /my_mysql/3306/mysql.sock
(2)启动、登录3307数据库:
[root@localhost /]# /my_mysql/3307/mysql_3307 start
Starting MySQL...
[root@localhost /]# netstat -tunlp|grep mysql
tcp6 0 0 :::3306 :::* LISTEN 924/mysqld
tcp6 0 0 :::3307 :::* LISTEN 27328/mysqld
[root@localhost /]#
[root@localhost data]# mysql -S /my_mysql/3307/mysql.sock