同一Linux下起两台Mysql Server

2,064 阅读3分钟

开始

额,无事不浪,主要还是因为碰到的问题。有个朋友拿我的服务器部署个项目,于是给他开了个账号,管理员权限就够了。然而他把Mysql给占了,我也要用咋办,他的项目我也不好动,混用同一个Server的话也很烦,只能百度另起一个了

动动手

主要都是些小白操作

假设你安装了Mysql了,傻瓜式yum/dnf/apt-get那种,然后起了Server,运行netstat -ntlp也能看到3306端口。就能用的那种,额,然后介绍下我这边的环境

  • CentOS 7
  • Mysql 5.7

安装过MongoDB的同学应该知道,需要自己指定data(数据文件)和log(日志)目录;使用Chrome跨域版也要指定user-dir用户数据目录。So,有了这些经验接下来就省事多了。

我们猜测一个新的Server应该离不开:

  • 安装目录
  • 存放数据文件的目录
  • 端口
  • 更详细的配置?

搬砖

百度一些操作,大致知道这是初始化一个Server的

mysqld --initialize

额,应该先创建一个文件夹,比如在/usr/local/mysql3307里,然后再

mkdir data

创建一个数据目录。也需要一份配置my.cnf,可以参考下默认的/etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

照葫芦画瓢我们vim my.cnf

[mysqld]
basedir=/var/local/mysql3307
datadir=/var/local/mysql3307/data
port=3307
server_id=4
character-set-server=utf8
socket=/var/lib/mysql/mysql3307.sock

symbolic-links=0

log-error=/var/log/mysqld3307.log
pid-file=/var/run/mysqld/mysqld3307.pid

socket、log、pid这种直接后面加个3307,方便以后找。然后可以初始化了:

mysqld --defaults-file=/usr/local/mysql3307/my.cnf --initialize --user=root

这里initialize参数得放到defaults-file后面....

之后会在data目录下看到一堆子文件。再建立密钥(不知道这个有啥用。。。)

mysqld_ssl_rsa_setup --defaults-file=/usr/local/mysql3307/my.cnf

为了避免之后登陆无密码错误,这里我们再写个文件mysql-init,初始化密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

看参考文章里时,会用mysqld_safe来启动Mysql Server,然而等待我的却是command not found,查到stackoverlfow上时说这个命令叫mysqld_save,但还是没用,文档上是:

mysqld reads options from the [mysqld] and [server] groups. mysqld_safe reads options from the [mysqld], [server], [mysqld_safe], and [safe_mysqld] groups. mysql.server reads options from the [mysqld] and [mysql.server] groups.

大致上区别就是读取my.cnf时会从对应的开头拿配置,比如之前写的就是[mysqld]。另外mysqld_safe可以后台启动Server,直接mysqld的话命令行一直停着,没法儿用了。

说了这么多,mysqld_safe还是没有,于是我们可以这样:

mysqld\
  --defaults-file=/usr/local/mysql3307/my.cnf\
  --init-file=/usr/local/mysql3307/mysql-init\
  --user=root\
  &

就最后加个&结束。第一次启动时init密码,之后可以去掉init-file启动

最后

连接Mysql与默认的有些区别,它需要指定socketport,像这样:

# xx是.socket地址
mysql --socket=xx port=3307 -uroot -p

一篇水文。。。

参考链接

  1. 数据库----(linux下安装多个mysql-5.7.19(tar.gz)教程)
  2. MySQL异常:ERROR 1045 (28000): Unknown error 1045