mysql二进制安装及破解密码
二进制安装mysql
mysql 官网 https://www.mysql.com/
往下滑看到MySQL Community (GPL) Downloads »
点击进去
点击进来之后看到Download Archives
点击进去
看到MySQL Community Server
点击
点击下载Download
# 二进制MySQL包我已提前下载好,使用xftp传到/opt/目录下
[root@localhost opt]# ls
mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
# 解压,并改为mysql
## 解压到/usr/local/
[root@localhost opt]# tar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@localhost local]# ls
bin etc games include lib lib64 libexec mysql-5.7.37-linux-glibc2.12-x86_64 sbin share src
[root@localhost local]# mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
[root@localhost local]# ls
bin etc games include lib lib64 libexec mysql sbin share src
# 创建mysql系统用户,没有家目录,不需要登录
[root@localhost opt]# useradd -r -M -s /sbin/nologin mysql
#修改目录/usr/local/mysql的属主属组
[root@localhost local]# chown -R mysql.mysql mysql
.......省略
drwxr-xr-x. 9 mysql mysql 129 Jun 28 16:13 mysql
......省略
# 添加环境变量(你也可以直接vim 写到/etc/profile.d/mysql.sh下面)
[root@localhost ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
#让其生效
[root@localhost ~]# source /etc/profile.d/mysql.sh
[root@localhost ~]# which mysqld
/usr/local/mysql/bin/mysqld
# 配置include
## 软链接到/usr/include/mysql,叫mysql
[root@localhost ~]# ln -s /usr/local/mysql/include /usr/include/mysql
# 配置 man 文档
[root@localhost ~]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/mysql/man # 添加这条
# 映射库文件
[root@localhost ~]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
[root@localhost ~]# ldconfig # 让其生效
# 建立数据存放目录
[root@localhost ~]# mkdir /opt/data
# 设置所有者和所属组为mysql
[root@localhost ~]# chown -R mysql.mysql /opt/data/
[root@localhost ~]# ll /opt/data/ -d
drwxr-xr-x. 2 mysql mysql 6 Jun 28 16:36 /opt/data/
# 初始化数据库
[root@localhost ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
.....省略
root@localhost: OL;CyL6)h5Do # 临时密码
# 请注意,这个命令的最后会生成一个临时密码,此处密码是OL;CyL6)h5Do
# 再次注意,这个密码是随机的,你的不会跟我一样,一定要记住这个密码,因为一会登录时会用到
# 生成配置文件
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 配置服务启动脚本
[root@localhost support-files]# pwd
/usr/local/mysql/support-files
[root@localhost support-files]# cp mysql.server mysqld
[root@localhost support-files]# ll
...省略
-rwxr-xr-x. 1 root root 10576 Jun 28 16:56 mysqld
-rwxr-xr-x. 1 mysql mysql 10576 Nov 30 2021 mysql.server
# 设置所有者所属组为mysql
[root@localhost support-files]# chown -R mysql.mysql mysqld
[root@localhost support-files]# ll
....省略
-rwxr-xr-x. 1 mysql mysql 10576 Jun 28 16:56 mysqld
-rwxr-xr-x. 1 mysql mysql 10576 Nov 30 2021 mysql.server
# 启动mysql
[root@localhost ~]# /usr/local/mysql/support-files/mysqld start
[root@localhost ~]# ps -ef|grep mysql
root 10713 1 0 17:05 pts/1 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/opt/data --pid-file=/opt/data/mysql.pid
mysql 10913 10713 0 17:05 pts/1 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/opt/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=localhost.localdomain.err --pid-file=/opt/data/mysql.pid --socket=/tmp/mysql.sock --port=3306
root 10944 10666 0 17:06 pts/1 00:00:00 grep --color=auto mysql
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
# 使用临时密码登录
[root@localhost ~]# mysql -uroot -p'OL;CyL6)h5Do'
....省略
# 看到这个ok
mysql>
# 修改密码
mysql> set password = password('tkl9639@G');
## 退出使用设置好的密码登录
[root@localhost ~]# mysql -uroot -ptkl9639@G
....省略
mysql>
配置mysql.service文件
# 关闭防火墙和SElinux
[root@localhost ~]# systemctl disable --now firewalld
# 临时关闭
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
# 永久关闭
[root@localhost ~]# head -7 /etc/selinux/config | tail -1
SELINUX=disabled
# 杀死 mysql 进程
[root@localhost ~]# pkill mysqld
# 复制到当前目录下、更改它
[root@localhost ~]# cp /usr/lib/systemd/system/sshd.service mysqld.service
[root@localhost ~]# vim mysql.service
[Unit]
Description=mysql server daemon
After=network.target sshd-keygen.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysqld start
ExecStop=/usr/local/mysql/support-files/mysqld stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
# 移动到 /usr/lib/systemd/system/ 下面
[root@localhost ~]# mv mysqld.service /usr/lib/systemd/system/
# 刷新程序、让其生效
[root@localhost ~]# systemctl daemon-reload
# 查看状态
[root@localhost ~]# systemctl status mysqld
● mysql.service - mysql server daemon
Loaded: loaded (/usr/lib/systemd/system/mysql.service; disabled; vendor preset: disabled)
Active: inactive (dead)
# 设置为开机自启、并立马启动
[root@localhost ~]# systemctl enable --now mysqld
[root@localhost ~]# systemctl status mysqld
● mysql.service - mysql server daemon
Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-06-28 17:31:24 CST; 11s ago
Process: 1649 ExecStart=/usr/local/mysql/support-files/mysqld start (code=exited, status=0/SUCCESS)
Main PID: 1662 (mysqld_safe)
.....省略
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
报错信息
# 登录时报错
[root@localhost ~]# mysql -uroot -p'OL;CyL6)h5Do'
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
# 需要这个库文件libncurses.so.5
# 查找这个库由哪个包提供
[root@localhost ~]# dnf provides libncurses.so.5
Last metadata expiration check: 0:35:59 ago on Tue 28 Jun 2022 04:33:57 PM CST.
ncurses-compat-libs-6.1-9.20180224.el8.i686 : Ncurses compatibility libraries
Repo : BaseOS
Matched from:
Provide : libncurses.so.5
# 安装 ncurses-compat-libs (再去登录ok)
[root@localhost ~]# dnf -y install ncurses-compat-libs
破解mysql密码
# 配置文件
[root@localhost ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
skip-grant-tables # 加入这一行 跳过授权表
# 重启MySQL
[root@localhost ~]# systemctl restart mysqld
# 登录MySQL ## 这时候不需要密码
[root@localhost ~]# mysql
......省略
# 进入MySQL数据库里面
mysql> use mysql
mysql> update user set authentication_string = password('tkl9639@G') where User = 'root';
# 重新配置文件
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 重启mysql
[root@localhost ~]# systemctl restart mysqld
# 登录MySQL
[root@localhost ~]# mysql -uroot -ptkl9639@G
......省略
mysql>
mysql配置文件
mysql 的配置文件为/etc/my.cnf
配置文件查找次序:若在多个配置文件中均有设定,则最后找到的最终生效
/etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf
# 优先级最低 /etc/my.cnf
# 优先级最高 ~/.my.cnf
mysql常用配置文件参数:
参数 | 说明 |
---|---|
port = 3306 | 设置监听端口 |
socket = /tmp/mysql.sock | 指定套接字文件位置 |
basedir = /usr/local/mysql | 指定MySQL的安装路径 |
datadir = /data/mysql | 指定MySQL的数据存放路径 |
pid-file = /data/mysql/mysql.pid | 指定进程ID文件存放路径 |
user = mysql | 指定MySQL以什么用户的身份提供服务 |
skip-name-resolve | 禁止MySQL对外部连接进行DNS解析 使用这一选项可以消除MySQL进行DNS解析的时间。 若开启该选项,则所有远程主机连接授权都要使用IP地址方 式否则MySQL将无法正常处理连接请求 |