MySQL:Linux下的多实例安装

文章详细介绍了如何在Linux上安装和配置多个MySQL实例,包括选择正确的版本,解压安装,创建my.cnf配置文件,设置端口号和socket路径,初始化数据库,启动和停止服务,以及处理启动时的PID文件问题。此外,还提到了登录MySQL时需指定位socket路径,以及自启动配置的问题和解决方法。
摘要由CSDN通过智能技术生成

2022年笔记迁移

一、安装

(以单个实例的安装为例,多实例的话更换文件名及端口号等,重复该步骤就可以;或者第一个实例保持默认,第二个实例按照下面步骤)
首先去下载linux的mysql版本,记得要下载这样形式的:

mysql-版本号-linux-glibc2.12-x86_64.tar.gz

否则会缺东西。

把压缩包移到指定的解压目录中,我这里设置的是/opt。

cd /opt
# 解压
tar -zxf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz

# 改个名字
mv mysql-5.7.36-linux-glibc2.12-x86_64/ mysql/

在mysql根目录创建一个my.cnf文件,并做相应配置:

touch mysql/my.cnf

下面给出一个my.cnf的内容实例,是我经历了多次验证之后的版本,尽量不要有遗漏:

[client]
#password       = your_password
port            = 3307
socket          = /opt/mysql/mysql48006.sock

[mysql]
socket=/opt/mysql/mysql48006.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3307
bind-address = 0.0.0.0
basedir=/opt/mysql
datadir=/opt/mysql/data
socket=/opt/mysql/mysql48006.sock
log-error=/opt/mysql/log/mysql48006.err
pid-file=/opt/mysql/mysql48006.pid
# 设置bin-log信息
log-bin=/opt/mysql/mysql-bin/mysql-bin	# binlog的路径和命名格式,将以mysql-bin开头
server-id = 4
max_binlog_size=200M	# 单个binlog文件的大小


# 下面这些配置暂时还不知道具体是干嘛的
default_authentication_plugin=mysql_native_password
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
lower_case_table_names=1
max_connections=1000
max_allowed_packet = 100M
character-set-server = utf8
collation-server = utf8_general_ci
wait_timeout=31536000
interactive_timeout=31536000

# 这里也需要设置一下,以mysqld_safe模式启动的时候,好像用的是这里的设置
[mysqld_safe]
log-error=/opt/mysql/log/mysql48006.err
pid-file=/opt/mysql/mysql48006.pid

配置好设置好的各个目录和文件

mkdir mysql/data
mkdir mysql/log
mkdir mysql/mysql-bin
touch mysql/log/mysql48006.err
touch mysql/mysql48006.pid

如果是用root用户创建的以上文件,最后还要赋权一下权限给Linux的常规用户:

chmod -R 777 mysql/

或者是文件的所属用户和所属组都改为你使用的常规用户:

chown -R 用户组:用户 /opt/mysql/

这里一定要检查好权限问题,否则启动不了。

因为MySQL启动后需要往设置好的err文件里写err信息,还会把主进程的PID号写进设置好的PID文件里,更别说data目录下还要存一堆东西了。

初始化你配好的mysql实例。这里我使用的用户是原先的常规用户。

./bin/mysqld --defaults-file=/opt/mysql/my.cnf --user=userxxx --basedir=/opt/mysql/ --datadir=/opt/mysql/data/ --initialize

初始化后,你去设置好的err文件中看cat /mysql/log/mysql48006.err,最后面会记录有root账户的默认密码,比如这一次我的是:

Z+uYs_1zflkZ

初始化成功后,就可以启动你的MySQL实例了。

./bin/mysqld_safe --defaults-file=/opt/mysql/my.cnf --basedir=/opt/mysql/ --datadir=/opt/mysql/data/  >/dev/null &

看是否输出正常,然后可以去查看对应的端口号是否开启了。

比如说这个实例,端口我用的是3307:

netstat -tunlp | grep 3307

如果看到是由mysqld进程listen的话,那么就说明成功了。

登录MySQL

多实例mysql的话,登录MySQL的时候,需要通过-S加上套接字路径来区分不同实例的MySQL服务这里很重要

./bin/mysql -u root -p  -S /opt/mysql/mysql48006.sock

然后输入默认的密码就可以。

进入之后修改密码:

alter user 'root'@'localhost' identified by 'pass@xxx'

如果要关闭这个实例的话,可以使用:

./bin/mysqladmin -u root -p -S /opt/mysql/mysql48006.sock shutdown

或者把PID文件里存的主进程kill掉就可以了。

授权指定账户的远程访问:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'pass@xxx' WITH GRANT OPTION;

FLUSH   PRIVILEGES;

二、配置自启动

理论上是可以配置自启动的,但是在多实例的情况下我并没有配置成功,但还是把过程放在这里,以供后续参考吧。

# 拷贝一份mysql.server到init.d下,并重命名
cp support-files/mysql.server /etc/init.d/mysql3307.server

# 设置自启动
cd /etc/init.d
chkconfig --level 2345 mysql3307.server on

但是这个mysql3307.server需要配置一下:

basedir=/opt/mysql
datadir=/opt/mysql/data
#conf=/etc/my.cnf --找一找整个文件内容,把原来的这个指向/etc的注释掉,修改成我们自己的my.cnf目录
conf=/opt/mysql/my.cnf

然后理论上,这时候就可以以service的方式启动了:

sudo service mysql3307.service start

但是这里我并没有成功,失败了,而且没有打印出任何失败信息,先暂时这样吧。。大不了不自启动了,以后出事了再手动启动吧。

三、问题

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’

这个问题之前困扰了我很久,我十分确认my.cnf文件里的sock设置的不是这个路径,但是每次mysql -u root登录的时候都会有这个问题。

后面发现是因为多实例登录的话,需要在后面通过-S参数跟上我们设置的socket路径,不然会冲突。

修改my.cnf配置文件不生效

在linux下的MySQL环境中,是有可能存在多个my.cnf,有的能对整个系统环境产生影响,比如/etc/my.cnf,有的是只能影响个别用户,比如~/.my.cnf

所以这就要求启动MySQL的时候,设置好-defaults-file=自定义的my.cnf

自启动配置失败,报错:ERROR! The server quit without updating PID file (/opt/mysql3308/mysql3308.pid).

造成这个问题的原因有很多,最主要是因为配置mysql的时候应该是以root用户部署的,而mysql默认提供的那个mysql.server里,启动的时候是使用mysqld_safe模式启动的,这时候需要指定用户为root才可以:

$bindir/mysqld_safe --user=root --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &

然后重新执行service start,终于SUCCESS。

参考文献:启动mysql服务时一直提示ERROR The server quit without updating PID file

四、参考文献

  1. Linux上一台服务器部署两个MySql数据库服务
  2. Linux下安装MySQL教程
  3. 修改my.cnf配置不生效
  4. Linux环境下安装MySQL(多实例安装) 这个才是真的好。成功的基本都是按照这个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值