MySQL安装包方式安装
完美解决 ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
适用于WSL,WSL2
如只为解决以上问题可直接看最后一点
环境:wsl2 的 centos7
前期准备:下载好的安装包,我这里用的是 mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
1. 用户准备
- 新增mysql组
groupadd mysql
- 新增 mysql用户
useradd -m mysql -g mysql
- 设置密码
passwd 123
2. 开始安装
- 切换mysql用户
su - mysql
- 创建MySQL安装目录
mkdir /home/mysql/setup
- 创建MySQL文件目录
mkdir /home/mysql/setup/data
- 上传安装包至 /home/mysql/setup,并解压
tar -zxf /home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
- 进入bin目录
cd /home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/bin
- 关联data目录
./mysqld --initialize --basedir=/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/ --datadir=/home/mysql/setup/data/
- 上一步会输出MySQL的root账户初始密码:
A temporary password is generated for root@localhost: et:tytrrJuoi
- 创建并编辑配置文件 my.cnf
vi /home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/my.cnf
- 复制以下配置并保存
[mysqld]
datadir=/home/mysql/setup/data
socket=/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/mysql.sock
basedir=/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64
user=mysql
wait_timeout=388000
interactive_timeout=388000
event_scheduler=ON
port=3306
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
log-error=/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/log/mysql.log
#pid-file=/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/mysql.pid
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
- 创建log目录
mkdir /home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/log
- 启动mysql
./mysqld_safe --defaults-file=/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/my.cnf --user=mysql &
- 创建软连接
ln -s /home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/mysql.sock /tmp/mysql.sock
- 打开mysql客户端,修改密码,初始密码已在前面的步骤中获得
./mysql -uroot -p
- 修改密码,刷新
alter user user() identified by "root";
use mysql;
update user set authentication_string=password('root') where user='root';
flush privileges;
exit;
- kill掉占用3306的进程,重启mysql
./mysqld_safe --defaults-file=/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/my.cnf --user=mysql &
- 进入mysql命令行
./mysql -uroot -proot
3. 后续操作
- 修改用户的环境变量(也可以直接修改root账户的)
vi ~/.bash_profile
- 追加如下内容至 .bash_profile 末尾
export PATH=$PATH:/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/bin
- 使配置文件生效
source ~/.bash_profile
接下来就可正常使用MySQL了。
4. 解决mysqld.sock无法连接
WSL最坑的地方就在于系统重启后MySQL等软件启动不了,这里可以通过以下命令重新启动MySQL,并让MySQL后台运行
nohup /home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/bin/mysqld_safe --defaults-file=/home/mysql/setup/mysql-5.7.31-linux-glibc2.12-x86_64/my.cnf --user=mysql &>/dev/null &