note-taker:Ethan_Yang
recording time: 2019/06/25
number of docs:5
【前言】
总有一些需求和业务情况让你不得不在已有mysql进程数据服务器上,再安装一个mysql进程,今天就搞一下一台服务器上两个mysql如何安装,本文新库安装采用二进制形式。
【服务器信息】
服务器A IP: 192.168.0.100 端口3306 3307
服务器B IP: 192.168.0.101 端口 3306
【业务需求】
最近来了一个需求,服务器A已有MySQL_1,再创建一个新库MySQL_2进程,并恢复服务器B上的MySQL_3中数据至新的服务器A上新创建的MySQL_2库中;服务器A上MySQL1用的是3006端口,新创建的MySQL_2进程规划使用3307端口。
【解决方案】
规划:
MySQL_1数据存放路径:/mysqldata/3306/
MySQL_2数据存放路径:/mysqldata/3307/
1.创建mysql编译目录
[root@dcm-testdb ~]# mkdir -p /mysqldata/3307
[root@dcm-testdb ~]#mkdir -p /mysqldata/3307/data
[root@dcm-testdb ~]#chown -R mysql:mysql /mysqldata/3307
2.登录MySQL_3查看要恢复的数据
[root@dcm-testdb ~]#/mysqlsoft/mysql/bin/mysql -uroot -p
mysql> select table_schema,round(sum(data_length+index_length)/1024/1024,4) from information_schema.tables group by table_schema;
3.使用mysqldump做MySQL_3库全备
[root@dcm-testdb ~]#/mysqlsoft/mysql/bin/mysqldump -uroot -p --all-databases --single-transaction --socket=/mysql/3307/data/mysqld.sock --master-data=2 >/mysql/backup/full_0625.sql
4.服务器A上创建MySQL_2
[root@dcm-testdb ~]# mkdir -p /mysqldata/3307/{data/,etc/,log/}
[root@dcm-testdb ~]# chown -R mysql:mysql /mysqldata/3307/data
[root@dcm-testdb ~]# chown -R mysql:mysql /mysqldata/3307/etc
5.在/mysqldata/etc/下创建新实例的my.cnf
[root@dcm-testdb ~]#vi /mysqldata/3307/etc/my.cnf
[mysqld]
datadir=/mysqldata/3307/data
Basedie=/usr/local/mysql
socket=/mysqldata/3307/data/mysql.sock
[mysqld_safe]
log-error=/mysqldata/3307/log/mysqld3307.log
pid-file=/mysqldata/3307/mysqld3307.pid
6. 配置自启动
#将mysql的启动服务添加到系统服务中,设置开机自启动:(chkconfig 命令redhat系统的)
[root@dcm-testdb ~]#cp /mysqlsoft/mysql/support-files/support-files/mysql.server /etc/init.d/mysql3307.server
创建软连接:
[root@dcm-testdb ~]# ln -s /mysqlsoft/mysql /usr/local/mysql
赋予执行权限:
[root@dcm-testdb ~]# chmod +x /etc/init.d/mysql3307.server
添加服务:
[root@dcm-testdb ~]# chkconfig --add mysql3307.server
显示服务列表:
[root@dcm-testdb ~]# chkconfig --list
如果看到mysql的服务,并且3,4,5都是on的话则成功,如果是off,则使用如下命令:
[root@dcm-testdb ~]# chkconfig --level 345 mysql3307.server on
7.新实例初始化
[root@dcm-testdb ~]#/mysqlsoft/mysql/bin/mysqld --defaults-file=/mysqlsoft/3307/etc/my.cnf --initialize --datadir=/mysqlsoft/3307/data/ --basedir=/usr/local/mysql --user=mysql
6.启动新数据库并修改root密码
[root@dcm-testdb ~]#/usr/local/mysql/bin/mysqld_safe --defaults-file=/mysqlsoft/3307/etc/my.cnf --user=mysql &
PS:一定记得后台方式打开MySQL库,否则会随着session的断开MySQL服务会中断。
[root@dcm-testdb ~]#/usr/local/mysql/bin/mysqladmin -uroot -p password 'mysql' --socket=/tmp/mysql3307.sock
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by 'mysql';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
8.服务器A MySQL_2上恢复MySQL_3的数据
/usr/local/mysql/bin/mysql -uroot -pmysql --socket=/mysql/3307/data/mysqld.sock </mysql/backup/full_0625.sql
9.验证数据
使用如下命令查看MySQL_2和MySQL_3的大小,做简单对比
mysql> select table_schema,round(sum(data_length+index_length)/1024/1024,4) from information_schema.tables group by table_schema;
【结语】
1.之前都是在单台服务器上部署一个MySQL进程,单台服务器上部署多个MySQL实例并不常见;常规做法更多的是在一个MySQL实例创建schema的形式来满足业务需求。
2.单台服务器上部署多个MySQL实例有其好处,即计算资源和数据存放均与原来的MySQL实例相互独立,逻辑上更为清晰,也方便进行管控,端口需不同,如本文源库使用3306端口,新库使用3307端口。
3.在一个MySQL实例使用服务器资源低的情况下,可以多部署几个MySQL实例,能充分利用服务器资源。