在一次实际部署过程中,碰到了服务器已经部署了一个mysql服务. 再部署新的mysql时,特别注意不能与另一个mysql互相影响.记录一次部署中存在的问题和解决方法.
因为已存在mysql,新的mysql部署采用的是mysql.tar.gz解压手动安装,避免.rpm或者.deb等自动安装方式覆盖了已有mysql的配置或者数据.
已部署的mysql服务查看与新mysql的服务部署选择
查看mysql配置文件的默认加载路径 /etc/mysql/my.cnf或者 /etc/my.cnf是否被占用
1.已存在的mysql服务占用了默认的加载路径
配置文件如果存在,查看里面配置的端口,如果与正在运行的mysql占用端口一致,则说明已存在的mysql已经占用了mysql的默认服务.
故新mysql不可以采用初始化后,将mysql解压目录下mysql.server服务文件放到/etc/init.d/mysqld/下,因为这样部署的新mysql服务会默认加载已存在的配置路径,无法运行.
因此,必须将mysql的服务,手动编写脚本,指定加载配置文件的路径,才能避免冲突.
以ubuntu为例:
//1.编写服务文件 mysql_new.service,指定配置文件[Unit]
Description=mysql
After=[Service]
Type=forking
WorkingDirectory=/mysql
ExecStart=/mysql/bin/mysqld_safe --defaults-file=/mysql/etc/my.cnf &[Install]
WantedBy=multi-user.target//2.服务文件移到系统路径,使得mysql_new作为服务名能被系统识别
mv mysql_new.service /etc/systemd/system/
//3.加载服务变动
systemctl daemon-reload
//4.服务开机自启动设置
systemctl enable mysql_new.service
//启动新mysql
service mysql_new start
注:mysql的默认加载路径优先级,/etc/mysql/my.cnf > /etc/my.cnf.
2.已存在的mysql服务未占用默认的加载路径
在初始化了数据库后,复制mysql的解压包内 support-files/mysql.server 到 /etc/init.d/mysqld/,
设置mysql自启动: chkconfig --add mysqld 或者 systemctl enable mysqld
然后就可以启动新的mysql了