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

 

posted @ 2022-06-14 16:27  屯子里唯一的架构师  阅读(484)  评论(0编辑  收藏  举报