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
四、参考文献
- Linux上一台服务器部署两个MySql数据库服务
- Linux下安装MySQL教程
- 修改my.cnf配置不生效
- Linux环境下安装MySQL(多实例安装) 这个才是真的好。成功的基本都是按照这个