一. 前言
在IT界 一般都不会轻易的使用最新版本的软件,因为新版本可能会出现各种问题
(你原本项目跑的好好的 非要画蛇添足更新版本 然后项目奔溃)
小段子:
更新完没事 那么你还是一个普通员工
更新完出事 那么你就是一名"烈士"
# 补充1: mysql有很多版本(5.6、5.7、8.0) 目前企业里面用的比较多的还是5.6左右.
# 补充2: 常见软件的默认端口号
MySQL 3306
redis 6379
mongodb 27017
django 8000
flask 5000
二. windows
1. 安装
安装版本: 安装mysql版本5.6.45
官网下载地址: https://www.mysql.com
第一步:
第二步:
第三步:
第四步:
第五步:
2. 配置环境变量
第一步:
第二步:
第三步:
第四步:
第五步:
第六步:
第七步:
3. 配置服务端mysqld.exe
注意!!!: 服务端的配置要使用管理员的身份启动DOS命令行.
第一步:
第二步:
4. 登录客户端mysql
第一步:
第二步:
5. 客户端修改密码
6. 配置客户端配置文件
提示:配置文件默认在登陆时就会检测mysql-5.6.45-winx64文件夹下的.ini
后缀名的文件.
目的1:统一字符编码
目的2: 以后不需要指定 iP, 端口, 用户名, 密码
解决: 到mysql-5.6.45-winx64文件夹下自定义my.ini
文件. (提示: 默认mysql在启动时就会去读取配置文件, 添加了配置文件以后, 需要重启mysqld服务端)
;参数解析
;[mysqld] -—> bin目录下的命令名
;[client] --> 所有的客户端的全局性配置, 如果登陆时[mysql]中没有指定用户名, 密码而[client] 中指定了, 以[client] 为准
;[mysql] --> mysql客户端的配置, 如果没有指定就以[client]为准
;补充: 5.6.38版本 没有用户名会报错 5.6.40版本 没有用户名不会报错
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
;这里指定你的登录用户名, 登陆时自动检测就不用每次来都需要输入用户名. --> `-uroot`
user="root"
;这里可以指定你的登录密码, 登录时自动检测就不用每次来都需要输入密码. ---> `-p123`
password="123"
7. 登录验证
8. 破解密码
原理: 客户端输入密码就会到服务端的配置文件中核验. 核验位置: mysql-5.6.45-winx64\\data\\mysql下的三个文件. user.frm, use.MYD, user.MYI
破解方式一: 暴力破解. 只适合用于mysql安装没多久
- 删除mysql-5.6.45-winx64\\data下的文件, 重新初始化一遍
破解方式二: 让服务端跳过密码权限表机制
# 步凑
1、首先,关掉Mysql进程。
2、运行 mysqld --skip-grant-tables
3、打开另一个命令窗口 运行mysql即可去修改密码
4. 刷新权限. flush privileges;
5. 关闭运行 mysqld --skip-grant-tables的DOS命令行端口.
6. 以管理员方式打开cmd. 重启mysql --> net start mysql
7. 登录
9. 命令总结 + 补充命令
# 1. windsows + r 键 根据你所输入的名称,为你打开相应的程序、文件夹、文档或Internet资源。
cmd # 打开DOS界面并可以输入cmd命令
services.msc # 查看系统服务
# 2. windows中管理员打开DOS界面输入cmd命令
mysqld –-install # 把数据库服务端在后头运行的系统服务(注意:需要管理员权限)
mysqld –-remove # 把数据库服务端为后台运行的服务卸载(注意:要把该程序先stop关闭)
mysqld --skip-grant-tables # 跳过mysqld服务端密码检测机制表(注意: 需要先关闭服务端, 并且开启新的DOS界面登录)
mysqladmin -uroot -p原密码 password 新密码 # 改命令直接在终端输入可无需进入客户端
mysqld --verbose –-help | findstr bind # 使用管道命令查看绑定IP用法
mysqld --bind--address=IP地址 # 绑定mysqld的IP地址
# 3. mysql客户端连接mysql服务端命令: 再cmd命令行输入以下命令
完整写法: (可以本地也可以远程)
mysql -h 服务端IP(如果是本次测试就指定127.0.0~255都行. 如果不是就指定服务端的公网IP地址) -P 3306(mysql服务端固定的熟知端口号) -u用户名 -p密码(注意: 密码的指定这里要紧跟其后, 且密码有空格还需要被双引号包裹)
缩写方式一: (本地登录. 如果没有配置my.ini文件, 默认普通用户. 如果配置了my.ini文件, 安装配置中的为准)
mysql
缩写方式二: (本地登录)
mysql -u用户 -p密码
# 4. mysql命令行命令
update mysql.user set password=password(\'密码\') where user=\'roort\'; # 5.6.45 MySQL版本修改密码
update mysql.user set authentication_string=password(\'密码\') where user=\'roort\'; # 5.7.25 MySQL版本中的mysql库下的user表中的密码字段从默认5.6.45 MySQL版本编变成了authentication_string.
update mysql.user set password_expired=\'N\' where user=\'roort\'; # 5.7.25 MySQL版本默认密码过期, 指定为密码不过期
flush privileges; # 刷新权限. 只要是修改了mysql库中的数据就需要指定.
\\G # 在MySQL的sql语句后加上\\G,表示将查询结果进行按列打印,可以使每个字段打印到单独的行。即将查到的结构旋转90度变成纵向;
\\s # 直接输入\\s. 查看数据库中的默认的字符编码, 版本, 当前登录用户等等信息.
\\c # 在MySQL的sql语句后加上\\c代表这条mysql语句不要了
quit 或者 exit 退出mysql
# 5. 补充: windows的cmd命令
taskkill /F /IM mysqld.exe # 指定进程名杀死该进程
taskkill /F /PID 进程pid号 # 指定进程PID杀死改进程(只有在管理员cmd窗口下才能成功)
三. linux
介绍: 配置远程服务器linux, 达到本地mysql客户端或者远程mysql客户端登录访问.
1. 服务端下载
我这里下载mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz版本. 进入linux后用命令下载
mkdir /opt/mysql
cd /opt/mysql
wget /tmp/https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
2. 服务端环境配置
# 1. 安装前,我们可以检测系统是否自带安装 MySQL
rpm -qa | grep mysql
# 2. 如有,类似 mysql-libs-5.1.52-1.el6_0.1.x86_64那可以选择进行卸载:
# rpm -e mysql-libs-5.1.52-1.el6_0.1.x86_64 # 普通删除模式
# rpm -e --nodeps mysql-libs-5.1.52-1.el6_0.1.x86_64 # 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
# 3. 检查否存在 mariadb 数据库,如有,卸载之,卸载同上
rpm -qa | grep mariadb
# 4. 如有,类似 mariadb-libs-5.5.56-2.el7.x86_64. 则 卸载
# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
3. 服务端安装
# 1. 进入安装包所在目录,解压文件
cd /opt/mysql
tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
# 2. 重命名
mv mysql-5.7.25-linux-glibc2.12-x86_64 mysql-5.7.25
# 3. 添加系统mysql组和mysql用户. 检查mysql组和用户是否存在,如无创建. 类似这种格式 mysql:x:490: 或者这种格式 mysql:x:496:490::/home/mysql:/bin/bash
cat /etc/group | grep mysql
# 4. 以上为存在的情况,如无,执行添加命令:
groupadd mysql
useradd -r -g mysql mysql # useradd -r参数表示mysql用户是系统用户,不可用于登录系统
# 5. 安装数据库, 并创建data目录
cd /opt/mysql/mysql-5.7.25
mkdir data
# 6. 将/opt/mysql/mysql-5.7.25的所有者及所属组改为mysql
chown -R mysql.mysql /opt/mysql/mysql-5.7.25
# 7. 在/opt/mysql/mysql-5.7.25/support-files目录下创建my_default.cnf.
vim /opt/mysql/mysql-5.7.25/support-files/my_default.cnf
# 8. 复制以下内容, 使用i模式, 鼠标右键复制进去. 再使用`Esc`键退出修改, 使用`:wq`保存退出. (提示: 以下的;是cnf文件的注释符号, 需要生效去除即可. )
[mysqld]
;skip-grant-tables ;这里是跳过密码机制表, 可以不使用密码登录. 目的是用来破解密码等下有用.
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
basedir = /opt/mysql/mysql-5.7.25
datadir = /opt/mysql/mysql-5.7.25/data
bind-address=0.0.0.0
port = 3306 ;mysql默认端口3306
socket = /tmp/mysql.sock
character-set-server=utf8
log-error = /opt/mysql/mysql-5.7.25/data/mysqld.log
pid-file = /opt/mysql/mysql-5.7.25/data/mysqld.pid
[mysql]
protocol=tcp ;如果不指定. 无法通过socket\'/var/run/mysqld/mysqld连接到本地MySQL服务器. 也就是说客户端无法通过网络进行连接
# 9. 拷贝,如果提示是否覆盖,y
cp -p /opt/mysql/mysql-5.7.25/support-files/my_default.cnf /etc/my.cnf
# 10. 初始化 mysqld
cd /opt/mysql/mysql-5.7.25
yum install -y libaio # 安装后在初始化就OK了
./bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/mysql-5.7.25/ --datadir=/opt/mysql/mysql-5.7.25/data/
# 11. 初始化完成之后,查看日志中的临时密码
cat /opt/mysql/mysql-5.7.25/data/mysqld.log
# 2019-04-08T06:14:29.790033Z 1 [Note] A temporary password is generated for root@localhost: a8?DQir=T+k+
# 12. 把启动脚本放到开机初始化目录
cp /opt/mysql/mysql-5.7.25/support-files/mysql.server /etc/init.d/mysql
# 13. 启动mysql服务
service mysql start
# 14. 配置环境变量.
vim /etc/profile # 进入以后使用i模式, 写入以下内容. 如果有空格就需要加双引号. 如: "$PATH:/opt/mysql/mysql-5.7.25/bin". 写完内容以后`Esc`退出修改, 使用`:wq`保存退出.
export PATH=$PATH:/opt/mysql/mysql-5.7.25/bin
# 15. 使用source命令使修改立刻生效
source /etc/profile
# 16. 登录mysql,密码为初始密码. 第11步指定的密码. 如果无效请看接下来的通过跳过密码检测机制表破解密码.
cd /opt/mysql/mysql-5.7.25
./bin/mysql -u root -p
# 17. 修改密码.
# 注意1: 因为是5.7.25版本密码从5.6版本的password修改成了anthentication_string.
# 注意2: 5.7.25版本的password_expired字段密码默认过期是Y, 我们下面要修改, 然密码不过期. 5.6则没有这种问题
# update mysql.user set password=password(\'123456\') where user=\'root\';
update mysql.user set anthentication_string=password(\'123456\') where user=\'root\';
update mysql.user set password_expired=\'N\' where user=\'root\';
flush privileges;
quit
# 18. 添加远程访问权限. 让所有的客户端进行访问默认localhost要修改为%
update mysql.user set host=\'%\' where user=\'root\';
flush privileges;
# 19. 重启mysql生效
# service mysql stop
# service mysql start # 或
service mysql restart
python4. 服务端密码破解
# 1. 编辑/etc/my.cnf文件, 输入`i`进入修改模式, 将上面第8步的`;`注释符取出. 输入`Esc`退出修改模式, 再输入`:wq`保存并退出文件.
vim /etc/my.cnf
# 2. 重启服务端
service mysql restart
# 3. 由于上面设置了环境变量. 直接登录mysql. 密码不用输入直接回车
mysql -uroot -p
# 4. 修改密码, 指定密码永久生效, 刷新权限, 退出
update mysql.user set authentication_string=password(\'指定你的密码\') where user=\'root\';
update mysql.user set password_expired=\'N\' where user=\'root\';
flush privileges;
quit
# 5. 编辑/etc/my.cnf文件, 输入`i`进入修改模式, 将上面第8步的skop-grant-tables前添加`;`注释符 输入`Esc`退出修改模式, 再输入`:wq`保存并退出文件.
vim /etc/my.cnf
# 6. 重启服务端
service mysql restart
# 7. 正常登录. 接着下面输入你的密码.
mysql -uroot -p
5. 客户端连接
前提: 防火墙的入口方向是允许的, 服务端开启了你当前子网的外网IP访问权限 + 3306端口
如何查看你当前子网的外网IP? 打开浏览器输入ip
就能查看.
# 进入cmd本地命令行输入以下命令. 提示: 以下-p输入密码密码如果有空格需要指定双引号包含, -p后面必须紧跟密码.
mysql -h 服务端的公网Ip -P 3306 -u用户(如果是root用户就直接指定root) -p密码
6. 可能遇见的错误
-
重置密码遇到ERROR 1045 (28000): Access denied for user \'root\'@\'localhost\' (using passwor:yes)问题
-
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file
-
修改用户密码报错ERROR 1054 (42S22): Unknown Column \'Password\' In \'Field List\'解决办法
-
mysql5.7密码过期ERROR 1862 (HY000): Your password has expired. To log in you must change