1-MySQL8 - 各平台安装MySQL8

for centos7.x

centos7.5 + mysql8.0.28

安装前的准备

把可能遗留的mariadb卸载掉,然后在下载libaio-devel依赖库,防止后续出现报错。

cd /opt/
yum install -y libncurses*
yum install -y libaio-devel
yum remove -y mariabd-libs
yum install wget -y

下载

留个百度云盘链接:https://pan.baidu.com/s/1tWkMtlm55bkY39cx0m-wSQ?pwd=jdzg 提取码:jdzg
你可以打开官网下载地址:https://dev.mysql.com/downloads/mysql/,按照截图所示下载即可。

你可以下载到本地之后,然后再上传到服务器中。
也可以直接:

cd /opt/
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
ll

[root@cs opt]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
[root@cs opt]# ll
-rw-r--r--. 1 root root 614964216 Jun  9 17:56 mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz

ok,下载完毕。

安装

1. 创建用户

useradd mysql

2. 创建数据存储的目录并给权限

cd /opt/
mkdir -p /data/mysql8/3306/data
chown -R mysql.mysql /data/mysql8

[root@cs opt]# mkdir -p /data/mysql8/3306/data
[root@cs opt]# chown -R mysql.mysql /data/mysql8

3. 解压缩安装包

cd /opt/
tar xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
ll


[root@cs opt]# pwd
/opt
[root@cs opt]# tar xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
[root@cs opt]# ll
total 628800
drwxr-xr-x. 9 root root       129 Jun 11 11:23 mysql-8.0.33-linux-glibc2.12-x86_64
-rw-r--r--. 1 root root 614964216 Jun  9 17:56 mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
-rw-r--r--. 1 root root  26071329 Jun  9 19:37 Python-3.10.10.tgz
-rw-r--r--. 1 root root   2848144 Jun  9 19:34 tengine-2.3.3.tar.gz
[root@cs opt]# ls mysql-8.0.33-linux-glibc2.12-x86_64
bin  docs  include  lib  LICENSE  man  README  share  support-files

现在解压后的安装包所在的目录就是/opt下的mysql-8.0.33-linux-glibc2.12-x86_64中。
4. 将安装包所在目录做一个软连接到/usr/local/mysql

cd /opt/
ln -s /opt/mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql
ls -ltr /usr/local/mysql

[root@cs opt]# ln -s /opt/mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql
[root@cs opt]# ls -ltr /usr/local/mysql   # 这里就能看到建立软链接之后的指向关系了
lrwxrwxrwx. 1 root root 40 Dec  3 21:38 /usr/local/mysql -> /opt/mysql-8.0.33-linux-glibc2.12-x86_64
# 补充一个删除软连接的命令
[root@cs opt]# rm -rf /usr/local/mysql

5. 将/usr/local/mysql添加到环境变量

cd /opt/
echo "export PATH=/usr/local/mysql/bin:\$PATH" >> /etc/profile
source /etc/profile
mysql -V


[root@cs opt]# mysql -V
mysql  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)

注意,如果输入mysql -V没有返回版本号,则尝试删除软连接并且重新建立软连接的动作。

6. 创建MySQL配置文件

[root@cs opt]# vim /etc/my.cnf

配置文件内容如下:

cat >/etc/my.cnf<<EOF

[mysqld]
user=mysql
port=3306
server_id=51
basedir=/usr/local/mysql
datadir=/data/mysql8/3306/data
socket=/tmp/mysql.sock

# 服务端字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4;'

[mysql]
# 客户端字符集
default-character-set=utf8mb4
socket=/tmp/mysql.sock

EOF

初始化

cd /opt/
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql8/3306/data


[root@cs opt]# pwd
/opt
[root@cs opt]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql8/3306/data
2023-06-11T07:12:21.118771Z 0 [System] [MY-013169] [Server] /opt/mysql-8.0.33-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.33) initializing of server in progress as process 4910
2023-06-11T07:12:21.131867Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-06-11T07:12:21.583086Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-06-11T07:12:22.871684Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

只要初始化过程中没有ERROR级别的错误,就说明初始化成功了。

启动测试

如果你跟着我的步骤走到这里,那么你可以在任意目录下执行如下命令启动MySQL服务。

mysqld &


[root@cs opt]# pwd
/opt
[root@cs opt]# mysqld &
[1] 4973
[root@cs opt]# 2023-06-11T07:15:29.006200Z 0 [System] [MY-010116] [Server] /opt/mysql-8.0.33-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.33) starting as process 4973
2023-06-11T07:15:29.043920Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-06-11T07:15:29.465207Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-06-11T07:15:29.979636Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2023-06-11T07:15:29.979658Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2023-06-11T07:15:30.001981Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
2023-06-11T07:15:30.002015Z 0 [System] [MY-010931] [Server] /opt/mysql-8.0.33-linux-glibc2.12-x86_64/bin/mysqld: ready for connections. Version: '8.0.33'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server - GPL.

[root@cs opt]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> exit;
Bye
[root@cs opt]# 

OK了,启动成功,MySQL的客户端也能直接登录进去了。说明安装过程都没问题。
当然啦,我们后续不会这么启动服务,接下来,我们要制作启动脚本,来个更方便的启动、重启、关闭MySQL服务。

MySQL服务几种启动方式

这小节主要聊聊我们都可以通过哪几种方式来管理MySQL服务。
注意,这一小节的操作只适用于centos7.x系统。
mysql.server
mysql安装成功后,安装目录中的support-files目录会有个mysql.server脚本文件,我们通过该文件来启动MySQL。

/usr/local/mysql/support-files/mysql.server stop
/usr/local/mysql/support-files/mysql.server start
/usr/local/mysql/support-files/mysql.server restart


[root@cs opt]# /usr/local/mysql/support-files/mysql.server stop
Shutting down MySQL.2023-12-03T13:45:34.479075Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user <via user signal>. Shutting down mysqld (Version: 8.0.33).
.2023-12-03T13:45:35.673140Z 0 [System] [MY-010910] [Server] /opt/mysql-8.0.33-linux-glibc2.12-x86_64/bin/mysqld: Shutdown complete (mysqld 8.0.33)  MySQL Community Server - GPL.
 SUCCESS! 
[1]+  Done                    mysqld
[root@cs opt]# /usr/local/mysql/support-files/mysql.server start
Starting MySQL.Logging to '/data/mysql8/3306/data/cs.err'.
 SUCCESS! 
[root@cs opt]# /usr/local/mysql/support-files/mysql.server restart
Shutting down MySQL. SUCCESS! 
Starting MySQL. SUCCESS! 

制作service脚本来启动MySQL服务
centos6中通过service来管理服务,我们在centos7中也可以用这个命令来管理MySQL服务。

service mysqld start/stop/restart/status

那么我们需要这么做就可以:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld restart


[root@cs opt]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@cs opt]# service mysqld status
 SUCCESS! MySQL running (5492)
[root@cs opt]# service mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 

通过systemctl来管理MySQL服务
centos7中通过systemctl来管理服务:

systemctl  start/stop/restart/status  mysqld

所以,我们也可以这么配置下:

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
systemctl enable mysqld
systemctl daemon-reload
systemctl restart mysqld
systemctl status mysqld

[root@cs opt]# 如果之前做了下面的cp命令,就不用再重复做了
[root@cs opt]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@cs opt]# 通过下面的命令基于原来service命令中的msyqld转换systemctl的启动MySQL的脚本文件
[root@cs opt]# systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
[root@cs opt]# systemctl restart mysqld
[root@cs opt]# systemctl status mysqld
● mysqld.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
   Active: active (exited) since Sun 2023-06-11 15:32:21 CST; 10s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 6146 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)

Jun 11 15:32:21 cs systemd[1]: Starting LSB: start and stop MySQL...
Jun 11 15:32:21 cs mysqld[6146]: Starting MySQL SUCCESS!
Jun 11 15:32:21 cs systemd[1]: Started LSB: start and stop MySQL.
Jun 11 15:32:21 cs mysqld[6146]: 2023-06-11T07:32:21.904793Z mysqld_...s
Hint: Some lines were ellipsized, use -l to show in full.

用户管理

初始化成功之后,MySQL默认创建了一个本地用户root用户,且该用户是无密码的,所以我们要为这个用户添加密码。
而且这个root用户通常只能管理员登录到服务器中才能使用的,你的应用程序要单独创建一个普通权限的用户。
所以,我们要做两件事,为root用户添加密码,并且以后都通过该用户来管理其它用户和权限。
想要了解更细节的用户管理和权限管理,你就要自己学习相关的内容了。
1. 为root用户添加密码

mysql

alter user root@"localhost" identified with mysql_native_password by "123";
create user zhangkai@'%' identified with mysql_native_password by "123";
grant all on *.* to zhangkai@"%";


[root@cs opt]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> -- 为root账号添加密码
mysql> alter user root@"localhost" identified with mysql_native_password by "123";
Query OK, 0 rows affected (0.01 sec)

mysql> -- 创建一个普通用户
mysql> create user zhangkai@'%' identified with mysql_native_password by "123";
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host,authentication_string,plugin from mysql.user;
+------------------+-----------+------------------------------------------------------------------------+-----------------------+
| user             | host      | authentication_string                                                  | plugin                |
+------------------+-----------+------------------------------------------------------------------------+-----------------------+
| zhangkai         | %         | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              | mysql_native_password |
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| mysql.session    | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| mysql.sys        | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| root             | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257                              | mysql_native_password |
+------------------+-----------+------------------------------------------------------------------------+-----------------------+
5 rows in set (0.00 sec)

mysql> -- 默认的创建的普通用户没啥权限,我们要给这个用户授权,允许该用户可以本地和远程登录,并且能够操作所有数据库中的所有表,这个权限已经不小了
mysql> grant all on *.* to zhangkai@"%";
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
Bye

ok,接下来,就可以使用zhangkai这个用户进行本地或者远程操作了,尽量不要把root用户放出去。并且,用户的权限越小越好,以免发生不必要的意外。

常见报错

mysql: error while loading shared libraries: libncursesso.6: cannot open shared object file: No such file or directory

安装完毕之后,执行命令报错:

解决方案:

yum install libncurses*

然后再尝试。

for Windows

mysql8.8.31 + win10

下载

你可以打开官网下载地址:https://downloads.mysql.com/archives/community/,按照截图所示下载即可。


我这里也提供一份百度云盘链接:https://pan.baidu.com/s/14_4y1ZogN8bFulO0vsn6IA?pwd=12td 提取码:12td

安装

下载到本地的安装包是zip包,选择一个指定目录进行解压,解压的过程就是安装的过程,解压后的目录所在的位置就是MySQL的安装目录。

如下截图,我将MySQL解压并安装到C盘的software目录下,你可以选择其他位置,注意,安装目录不允许有中文、空格和其他特殊字符:

所以MySQL的安装目录就是C:\software\mysql-8.0.31-winx64,记好这个目录,后面会用到。

配置环境变量

拷贝安装目录内的bin路径,并将其添加到系统的环境变量中,即C:\software\mysql-8.0.31-winx64\bin,这一步是为了将来我们打开终端,就可以直接输入MySQL相关命令,操作系统会读取这个bin路径下的对应的可执行程序文件,然后让该文件执行具体命令。

然后按照下图所示添加环境变量:

然后以管理员权限打开终端,输入mysqld -V如果返回了版本号和路径,表示环境变量添加成功。

添加配置文件

在你的MySQL安装目录下,手动创建my.ini文件,文件内容如下:

[mysqld]
# 默认端口
port=3306
# mysql的安装目录,也是工作目录
basedir=C:/software/mysql-8.0.31-winx64
# 数据库存放的目录,data目录无需手动创建,MySQL初始化成功,就会自动创建了
datadir=C:/software/mysql-8.0.31-winx64/data
# 错误日志,如果启动失败,可以查看这个错误日志,定位错误原因
log_error=C:/software/mysql-8.0.31-winx64/mysql.err

# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB


# 默认使用 mysql_native_password 插件认证,mysql8.0.4之前,mysql连接时身份验证使用的是 mysql_native_password,但是mysql8.0.4之后,就默认改为了caching_sha2_password 方式
# 这就导致了一个问题,老版本的第三方的客户端或者jdbc驱动没有跟着更新的话,就连不上,这里为了方便,还是用原来的 mysql_native_password 方式认证。
default_authentication_plugin=mysql_native_password

# 指定默认字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake=true

[client]
default-character-set=utf8mb4

[mysql]
# 可选的参数当你use到某个数据库中,路径上显示当前数据库的名字
# prompt=[\\d]>

# 关于字符集的设置
default-character-set=utf8mb4

注意,路径分隔符,不要用Windows默认的\,这样会有转义,很可能会导致安装失败,所以路径分隔符我们手动改为/

初始化

注意,必须是以管理员权限打开终端执行下面的初始化命令,注意必须是管理员权限!!!!否则报错!!!!!
注意,必须是以管理员权限打开终端执行下面的初始化命令,注意必须是管理员权限!!!!否则报错!!!!!
注意,必须是以管理员权限打开终端执行下面的初始化命令,注意必须是管理员权限!!!!否则报错!!!!!

mysqld --initialize-insecure --console

--initialize-insecure,表示不安全的初始化。这个参数来自于--initialize参数。
因为从MySQL5.7版本开始,如果使用于--initialize参数执行初始化,会生成一个临时密码(临时密码文件在data目录内的"你的主机名.err"文件),后续我们还有手动改密码,那么找这个临时密码又比较麻烦,一不小心就会找错,所以这里改为--initialize-insecure,初始化时将root用户的登录密码设置为空,后续改密码我们也好直接一行命令就搞定了。
初始化成功如下图,可以发现没有error级别的日志输出,初始化成功的另一个标志是,在MySQL的安装目录中,会多个data目录,这个data目录是是MySQL在初始化过程中创建的数据目录,也是后续我们创建的数据库的目录所在。

如果你没有发现data目录,说明初始化过程有些问题,重新以管理员的身份打开终端执行初始化命令。

添加系统的服务

这一步是将MySQL服务端添加到系统的服务中,并且设置为自动/手动。
如果设置为自动,表示开机启动MySQL服务端。如果设置为手动,那么不会开机启动,当我们需要用到MySQL的时候,就需要手动启动MySQL服务,手动启动MySQL服务的方式是,管理员权限打开终端,使用net命令来管理MySQL服务了。注意,也必须是在以管理员身份运行的终端中才能使用net命令管理MySQL服务。

# 将MySQL服务端注册到Windows的系统服务中,可以配置开机自启动
mysqld install mysqld8

# 补充命令,当然了,如果你手一抖,注册的名字觉得不太好,没关系,可以通过下面的命令删除注册的服务,然后重新注册即可
mysqld remove mysqld8

# 手动启动或关闭MySQL服务端的话,就必须是管理员权限打开的终端执行net命令
net start mysqld8
net stop mysqld8


在Windows的系统中,也能找到刚刚注册的MySQL服务端。

测试

当MySQL服务正常启动后,我们就可以尝试使用客户端连接并操作MySQL了。
当然了,后续通过客户端操作MySQL服务,管理员权限打开的终端就不是必须得了,直接打开终端就能搞,也只有安装时才是管理员权限。

mysql -uroot -p

创建密码

此时的终端还是以管理员的身份打开的终端执行:

mysqladmin -uroot -p password 123


ok,在Windows平台安装MySQL完事了。
补充一个忘记密码的如何找回的操作,参考这个链接

posted @ 2023-02-19 16:40  听雨危楼  阅读(464)  评论(0编辑  收藏  举报