zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Linux 下安装mysql 5.7 --Centos7

2023-09-11 14:21:27 时间

1、下载:

方法一:官网下载地址:https://dev.mysql.com/downloads/mysql/5.7.html
方法二:连接:百度网盘-链接不存在      提取码:h1ii 

2、安装:

1、解压tar.gz

tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

解压格式:tar zxvf 压缩后的路径及包名 你要压缩的文件
z:要解压的为gzip压缩
x:解压 
v:显示打包压缩解压过程
f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名

2、移动并重命名:

mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql-5.7.26
cd /usr/local/
ln -s mysql-5.7.26/ mysql
  • /usr:系统级的目录,可以理解为C:/Windows/。
  • /usr/lib:理解为C:/Windows/System32。 
  • /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。 这里主要存放那些手动安装的软件

3、创建mysql用户、用户组,并权限配置

groupadd mysql
useradd -r -g mysql mysql

4、创建数据目录(/data/mysql ),赋予mysql属主、组

mkdir -p /data/mysql              #创建目录
chown mysql:mysql -R /data/mysql   #赋予权限

5、配置 my.cnf (基础)

vim /etc/my.cnf

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

解释:

user=mysql                  #MySQL启动用户
basedir=/usr/local/mysql    #数据文件存放的目录 
datadir=/data/mysql         #数据安装、数据存储目录
socket=/tmp/mysql.sock      #用于本地连接的socket套接字,连接数据库由两种模式,一种为 TCP/IP模式,navicat等,
                            另一种为Socket协议,而sock只为本地登录。在数据库启动会才会生成mysql.sock
server_id=6                 #服务端ID,用来高可用时做区分,主要应用于主从复制
port=3306                   #数据库端接号
log_error=/data/mysql.log   #数据库错误日志
log_bin=/dqta/mysql.bin          #数据库bin日志,主要应用于主从复制
pid-file=/data/mysql/mysql.pid   #pid文件所在目录  mysqld启动时的加载文件
character_set_server=utf8mb4     #编码格式

[client] 代表客户端默认设置内容;
[mysql] 代表我们使用mysql命令登录mysql数据库时的默认设置;
[mysqld] 代表数据库自身的默认设置;

6、初始化数据库

进入mysql 的 bin 目录

cd /usr/local/mysql/bin/

初始化:

./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

可能遇到的问题

./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object 
file: No such file or directory

解决方法:

根据提示由于libaio链接库有没有安装,使用命令进行核查如果无任何结果代表无该链接库文件。
rpm -qa | grep libaio   
安装libaio
yum  install  libaio-devel.x86_64
安装成功后,继续运行数据库的初始化命令,提示成功。

mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object 
file: No such file or directory

不要就安装libncurses.so.5,如果安装一个包,还会提示问题,解决方法:
yum install libncurses*

7、查看mysql 初始化密码(随机生成的)

cat /data/mysql/mysql.err

如上图所示,得到初始化密码。


8、启动mysql

方法一:service

先将 mysql.server 放置到 /etc/init.d/mysql 中:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld   #mysql.server为启动脚本,service 启动的是/etc/init.d中的脚本

启动Mysql :service mysqld start 

方法二:systemctl
Centos7 中 /usr/lib/systemd/system/ 目录存放官方的软件
Centos7 中 /etc/systemd/system 目录为官方给出后期存放第三方软件

vim /etc/systemd/system/mysqld.service

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
 
[Install]
WantedBy=multi-user.target
 
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
#Restart=on-failure
#RestartPreventExitStatus=1
#PrivateTmp=false
提权:chmod a+x /etc/systemd/system/mysqld.service 
启动Mysql :systemctl start mysqld.service

讲解一下systemctl:

Centos7中systemctl的 systemctl enable | disable |  is-enabled  | status | is-active unit
systemctl get-default | set-default graphical.target | multi-user.target islate 在线切换模式  
systemctl reload-daemon 加载新的 unit 配置文件  
systemd 的 unit 的配置文件位置:
redhat 系列:目录/usr/lib/systemd/system/下 
enable 系列:/etc/systemd/system/multi-user.target.wants/这个目录下做 unit 配置文件的软链

注意:通过二进制启动 和 systemctl 和 service 不可以交替使用、mysql和mariadb不能同时启动

根据版本的不同,如果输入mysql提示没有命令,将/mysql/bin/mysql添加的系统bin中
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

9、修改密码

前面的步骤cat /data/mysql/mysql.err我们能查出 mysql 随机生成的密码,接下来登录mysql,修改自己密码。

# 考虑提供的密码带有特殊字符,所以用''号引起来
# 提供的账号,只能通过本地TCP连接,所以-S 指定了本地连接问题mysql.sock
mysql -uroot -p'密码' -S /tmp/mysql.sock

一、 使用mysql.err的初始密码进入数据库修改mysql.user表

结果一:

use mysql; 后如果如下提示,使用如下命令重置密码

查看目前账户密码,注意:此处是authentication_string不是password

select user,host,authentication_string from mysql.user;

使用如下命令重置密码,此文档设置root账户密码为root 
update user set authentication_string=password('root') where user='root' and host='localhost';

刷新权限并退出
flush privileges;

结果二:

use mysql; 后如果如下提示

使用alter user修改密码,如下命令重置密码,其中by后接的是密码
alter user 'root'@'localhost' identified by 'root';
flush privileges;

或者使用user()可以获取当前用户名,也可以修改密码

alter user user() identified by "root";

二、  如果密码忘了,如何修改密码

方法一:在vi /etc/my.cnf下的[mysqld]下加入
skip-grant-tables  #跳过授权表
skip-networking    #跳过远程登录,意思是关闭掉远程,此配置为了安全,谨慎使用
重启数据库

然后就可以使用mysql -uroot -p,可以按照 “登录后修改密码” 的方案,修改密码,为了防止一条命令修改不好使,直接两条命令运行

[root@localhost ~]# vi /etc/my.cnf
[root@localhost ~]# systemctl restart mysqld.service
[root@localhost ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [mysql]> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

MySQL [mysql]> update user set authentication_string=password('123456') where user='root' and host='localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1

MySQL [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MySQL [mysql]> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

MySQL [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MySQL [mysql]> exit
Bye
[root@localhost ~]#

方法二:停止mysql,使用配置文件启动mysql,可以按照 “登录后修改密码” 的方案,修改密码,为了防止一条命令修改不好使,直接两条命令运行

10、解释修改密码语句

update user set authentication_string=password('root') where user='root';  
修改的是只要user表匹配上user =root,host = 所有,都修改其密码

update user set authentication_string=password('root') where user='root' and host='localhost';  修改的是user表,匹配上user =root,host = localhost,修改其密码

11、其他修改mysql的用户密码命令

分别使用grant、alter、set修改
①mysql> grant all privileges on *.* to '用户名'@'登录主机' identified by '密码';
grant 权限列表(insert、del等) privileges on 数据库.表 to ‘用户名’@’访问主机’ identified by ‘密码’; 

mysql> grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;
mysql> flush privileges;

grant :赋权命令
all privileges:当前用户的所有权限
on:介词
*.*:当前用户对所有数据库和表的相应操作权限
to :介词
‘root’@’%’:权限赋给root用户,所有ip都能连接
identified by ‘123456’:连接时输入密码,密码为123456
with grant option:允许级联赋权

②mysql> alter user '用户名'@'登录主机' identified by '密码(自定义)';
③只有超级管理用户(如 root 用户)才能修改其他用户密码,如果是普通用户,可修改自己的密码。
修改当前用户密码: mysql>SET PASSWORD=PASSWORD("123456"); 
修改其他用户密码:mysql>SET PASSWORD FOR '用户名'@'登录主机' = PASSWORD('密码');

grant all on *.* to 'test_1'@'localhost' identified by '123456';
SET PASSWORD FOR 'test_1'@'localhost' = PASSWORD('123456789');
alter user 'test_1'@'localhost' identified by '123456';

查看权限:
select user ,host from mysql.user;

show grants for 你的用户;
show grants for ‘root’@’%’:

12、远程连接

use mysql;                                         # 访问 mysql 库 
update user set host = '%' where user = 'root';    # 使 root 能再任何 host 访问
flush privileges;                                  # 刷新 
quit;    

13、追加问题

用navicat 等远程工具连接的是root@%,所以如何针对此账户修改密码

%表示允许所有机器能访问root用户。如果要对root@%进行单独修改密码,上面的命令修改的是
update mysql.user set authentication_string=password('hwg123') where user='root' and Host = '%';

14、service形式mysqld 开机自启:

确保下 /etc/rc.d/init.d/ 目录下mysqld ,并有执行
[root@localhost ~]# ll /etc/init.d/mysqld 
-rwxr-xr-x 1 root root 10576 5月  16 02:15 /etc/init.d/mysqld

如果没有 cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
赋予可执行权限:chmod +x /etc/init.d/mysqld

配置开机自启,添加为服务: 
[root@localhost ~]# chkconfig --add mysqld
[root@localhost ~]# chkconfig --list

mysqld    0:关    1:关    2:开    3:开    4:开    5:开    6:关
看到3、4、5状态为开或者为 on 则表示成功。如果是 关或者 off 则执行一下:chkconfig --level 345 mysqld on重启计算机:reboot