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为端口参数