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完事了。
补充一个忘记密码的如何找回的操作,参考这个链接