mysql多实例安装---分别定义不同的配置文件

 

1.安装MySQL需要的依赖包

[root@MySQL ~]# yum install ncurses-devel libaio-devel cmake -y

[root@MySQL ~]# rpm -qa ncurses-devel libaio-devel

ncurses-devel-5.7-4.20090207.el6.x86_64

libaio-devel-0.3.107-10.el6.x86_64



2.安装编译MySQl需要的软件(通过wget下载,或者本地电脑上传到linux里,这里用wget下载)

wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.32.tar.gz

wget http://www.cmake.org/files/v2.8/cmake-2.8.8.tar.gz


yum install lrzsz -y #需要安装lrzsz

rz -y  #上传包    sz -y #下载到本地


[root@MySQL ~]# useradd olodboy

[root@MySQL ~]# cd /home/oldboy/

[root@MySQL ~]# mkdir /tools

[root@MySQL ~]# cd /tools/


[root@MySQL tools]# rz -y

分别上传cmake-2.8.8.tar.gz和mysql-5.5.32.tar.gz

查看检查

[root@MySQL tools]# ls -lh

total 29M

-rw-r--r--. 1 root root 5.5M Sep  1  2016 cmake-2.8.8.tar.gz

-rw-r--r--. 1 root root  24M Sep  1  2016 mysql-5.5.32.tar.gz


[root@MySQL tools]# tar xf cmake-2.8.8.tar.gz

[root@MySQL tools]# cd cmake-2.8.8

[root@MySQL cmake-2.8.8]# ./configure  #无需加任何参数

[root@MySQL cmake-2.8.8]# gmake

[root@MySQL cmake-2.8.8]# gmake install

[root@MySQL cmake-2.8.8]# cd ..


开始安装MySQL

创建用户和组

[root@MySQL tools]# useradd mysql -s /sbin/nologin -M

检查

[root@MySQL tools]# id mysql

uid=501(mysql) gid=501(mysql) groups=501(mysql)

[root@MySQL tools]# tar xf mysql-5.5.32.tar.gz

[root@MySQL tools]# cd mysql-5.5.32

[root@MySQL mysql-5.5.32]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \

-DMYSQL_DATADIR=/application/mysql-5.5.32/data \

-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

-DENABLED_LOCAL_INFILE=ON \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \

-DWITH_FAST_MUTEXES=1 \

-DWITH_ZLIB=bundled \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_READLINE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DWITH_DEBUG=0

[root@MySQL mysql-5.5.32]# make && make install

[root@MySQL mysql-5.5.32]# ln -s /application/mysql-5.5.32/ /application/mysql


检查

[root@MySQL mysql-5.5.32]# ls /application/ -l

total 4

lrwxrwxrwx.  1 root root   26 Aug 30 01:36 mysql -> /application/mysql-5.5.32/

drwxr-xr-x. 13 root root 4096 Aug 30 01:17 mysql-5.5.32


这里以3306,3307两个实例为例,创建相关mysql多实例的目录如下:

[root@MySQL mysql-5.5.32]# yum install tree dos2unix nmap -y    #安装tree

[root@MySQL mysql-5.5.32]# mkdir -p /data/{3306,3307}/data

[root@MySQL mysql-5.5.32]# tree /data

/data

├── 3306        #3306实例的目录

│?? └── data   #3306实例的数据文件目录

├── 3307        #3307实例的目录

│?? └── data   #3307实例的数据文件目录

└── oldboy.txt


4 directories, 1 file


提示:

1.mkdir -p /data/{3306,3307}/data相当于mkdir -p /data/3306/data; mkdir -p /data/3307/data


创建MySQL多实例的配置文件

    MySQL数据库默认为用户提供了多个配置文件模板,用户可以根据服务器大小来选择

[root@MySQL mysql-5.5.32]# ls -l support-files/my*cnf

上面是单实例的配置过程的默认配置文件模板,我们这里配置多实例和单实例相同了,我们为了让MySQL多实例之间彼此独立,因此,我们为每一个实例建立一个配置文件和一个启动文件mysql,分别对应自己的数据文件data。

我们可以通过vi命令来添加配置文件的内容,如下:

vi /data/3306/my.cnf

vi /data/3307/my.cnf


[root@MySQL mysql-5.5.32]# cd /

上传data.zip

[root@MySQL /]# rz -y 

解压data.zip

[root@MySQL /]# unzip data.zip

[root@centos1 /]# tree /data

/data

|-- 3306

|   |-- data

|   |-- my.cnf

|   `-- mysql

|-- 3307

|   |-- data

|   |-- my.cnf

|   `-- mysql

`-- oldboy.txt


4 directories, 5 files


特别说明

本文多实例启动文件的启动mysql服务实质命令:

mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 /dev/null &

mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 /dev/null &


本文多实例启动文件的停止mysql服务实质命令:

mysqladmin -u root -poldboy -S /data/3306/mysql.sock shutdown

mysqladmin -u root -poldboy -S /data/3307/mysql.sock shutdown



[root@MySQL /]# chown -R mysql.mysql /data

[root@MySQL /]# find /data -type f -name "my.cnf"

/data/3306/my.cnf

/data/3307/my.cnf

[root@MySQL /]# find /data -type f -name "my.cnf"|xargs ls -l

-rw-r--r--. 1 mysql mysql 1899 Oct 29  2013 /data/3306/my.cnf

-rw-r--r--. 1 mysql mysql 1901 Oct 29  2013 /data/3307/my.cnf


[root@MySQL /]# find /data -type f -name "mysql"|xargs ls -l

-rw-r--r--. 1 mysql mysql 1307 Jul 15  2013 /data/3306/mysql

-rw-r--r--. 1 mysql mysql 1307 Jul 21  2013 /data/3307/mysql


[root@MySQL /]# find /data -type f -name "mysql"|xargs chmod 700

[root@MySQL /]# find /data -type f -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


[root@MySQL /]# ls -l /application/mysql/bin/mysql

-rwxr-xr-x. 1 root root 5345508 Aug 21 22:52 /application/mysql/bin/mysql

[root@MySQL /]# ls  /application/mysql/bin


[root@MySQL /]# echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile   #注意,echo后是单引号,双引号是不行的

[root@MySQL /]# tail -l etc/profile 

export PATH=/application/mysql/bin:$PATH

[root@MySQL /]# source /etc/profile

执行source使上一行添加到/etc/profile中内容直接生效

以上命令的用途为,定义mysql全局路径,实现在任意路径执行mysql命令

[root@MySQL /]# echo $PATH

/application/mysql/bin:/application/mysql/bin:/application/mysql/bin:/application/mysql/bin:/application/mysql/bin:/application/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

执行echo $PATH有/application/mysql/bin输出表示配置成功


#提示:也可以用这条命令做软链接

[root@MySQL /]# ln -s /application/mysql/bin/* /usr/local/sbin/  

[root@MySQL /]# ls -l /usr/local/sbin/mysql*


[root@MySQL /]# which mysql

/usr/local/sbin/mysql

检查

[root@MySQL /]# ls -l `which mysql` 

lrwxrwxrwx. 1 root root 28 Jul 22 12:56 /usr/local/sbin/mysql -> /application/mysql/bin/mysql

[root@MySQL /]# type `which mysql`

/usr/local/sbin/mysql is /usr/local/sbin/mysql


[root@MySQL /]# cd /application/mysql/scripts/

[root@MySQL scripts]# ls

mysql_install_db


初始化mysql 3306实例

[root@MySQL scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql

看到两个OK代表初始化成功


初始化mysql 3307实例

[root@MySQL scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql


[root@MySQL scripts]# /data/3306/mysql start

Starting MySQL...

[root@MySQL scripts]# /data/3307/mysql start                       

Starting MySQL...

检查端口

[root@MySQL scripts]# netstat -lntup|grep 330

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      30768/mysqld        

tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      31494/mysqld 


登录mysql实例 3306,-S /data/3306/mysql.sock 用于区别登录不同实例

[root@MySQL scripts]# mysql -S /data/3306/mysql.sock

[root@MySQL scripts]# mysql -S /data/3307/mysql.sock


重启对应的实例数据库

/data/3306/mysql stop

/data/3307/mysql start


设置mysql不同实例登录密码

[root@MySQL scripts]# mysqladmin -uroot password oldboy123 -S /data/3306/mysql.sock

[root@MySQL scripts]# mysqladmin -uroot password oldboy456 -S /data/3307/mysql.sock


带密码登录不同实例数据库方法

mysql -uroot -poldboy456 -S /data/3307/mysql.sock

mysql -uroot -poldboy123 -S /data/3306/mysql.sock


[root@MySQL scripts]# sed -i '13 s#oldboy#oldboy123#g' /data/3306/mysql

[root@MySQL scripts]# sed -n '13p' /data/3306/mysql

mysql_pwd="oldboy123"

[root@MySQL scripts]# sed -i '13 s#oldboy#oldboy456#g' /data/3307/mysql   

[root@MySQL scripts]# sed -n '13p' /data/3307/mysql                    

mysql_pwd="oldboy456"


[root@MySQL scripts]# /data/3306/mysql stop

Stoping MySQL...

[root@MySQL scripts]# /data/3307/mysql stop 

Stoping MySQL...

[root@MySQL scripts]# ss -lntup|grep 3307

[root@MySQL scripts]# ss -lntup|grep 3306

[root@MySQL scripts]# /data/3306/mysql start

Starting MySQL...

[root@MySQL scripts]# /data/3307/mysql start 

Starting MySQL...

[root@MySQL scripts]# ss -lntup|grep 3306   

tcp    LISTEN     0      128                    *:3306                  *:*      users:(("mysqld",32625,12))

[root@MySQL scripts]# ss -lntup|grep 3307

tcp    LISTEN     0      128                    *:3307                  *:*      users:(("mysqld",33343,11))

[root@MySQL scripts]# ss -lntup|grep 330

tcp    LISTEN     0      128                    *:3306                  *:*      users:(("mysqld",32625,12))

tcp    LISTEN     0      128                    *:3307                  *:*      users:(("mysqld",33343,11))


下面增加一个MySQL 3308端口实例的命令集合如下:

mkdir -p /data/3308/data

\cp /data/3306/my.cnf /data/3308/

\cp /data/3306/mysql /data/3308/

sed -i 's/3306/3308/g' /data/3308/my.cnf

sed -i 's/server-id=1/server-id=8/g' /data/3308/my.cnf

sed -i 's/3306/3308/g' /data/3308/mysql

chown -R mysql:mysql /data/3308

chmod 700 /data/3308/mysql

cd /application/mysql/scripts

./mysql_install_db  --datadir=/data/3308/data/ --basedir=/application/mysql/ --user=mysql

chown -R mysql:mysql /data/3308

/data/3308/mysql start

sleep 5

netstat -lnt|grep 3308


登录mysql实例3308

[root@MySQL scripts]# mysql -S /data/3308/mysql.sock



关于多实例MySQL登录问题小结

1、多实例本地登录MySQL

多实例本地登录一般通过socket文件来指定具体登录到那个实例,此文件具体位置是在mysql编译过程或者my.cnf文件里指定的。在本地登录数据库时,登录程序通过socket文件来判断登录的是那个数据库实例

2、远程连接登录MySQL多实例

远程登录MySQl多实例其中的一个实例,通过TCP端口(port)来指定所要登录的MySQL实例,此端口的配置是在mysql配置文件my.cnf中指定的

端口 port 例如:mysql -uoldboy -p'oldboy' -h 192.168.10.129 -P 3307  #-P为端口参数