MySQL的安装使用备份还原

安装使用(Ubuntu22.04 apt)

这一章是基于Ubuntu22.04LTS版,使用apt命令安装。

查看有没有安装过MySQL软件

1
2
3
4
5
sudo su     # 先切换到root用户
apt update # 更新一下软件目录
apt upgrade # 更新一下所有软件
apt list --installed | grep "mysql" #看看有没有安装过mysql
#没有返回值就是没有安装过

图片

查找能安装哪一个版本的MySQL

Ubuntu的库中有很多款MySQL,要准确知道安装是哪一个版本要注意一下,最好先上网搜索一下各版本区别。

1
2
apt list --all-versions | grep "mysql" #看看有哪些版本的mysql可以安装
# 选择mysql-server-8.0这个版本

图片

安装MySQL

1
2
apt install mysql-server-8.0 #进行安装
#输入y,回车开始安装

图片
图片

首次登录MySQL

1
2
mysql -v #这就登录进去了?
#猜测是在本机用root用户就能无条件登入

图片

查看MySQL中有哪些数据库

1
show databases; --查找已经有哪些数据库

图片

查看MySQL中有哪些用户

1
2
use mysql; --先切换到mysql这个数据库
select user, host from user; --查找user这表中数据

图片

查看mysql库中有哪些表?

  • MySQL是数据库软件
  • mysql是软件中的其中一个库
    1
    2
    use mysql; --确保已经切换到mysql这个数据库
    show tables; --查找出mysql库中有什么表
    图片

查看mysql库中的user表有哪些字段

1
2
use mysql; --确保已经切换到mysql这个数据库
describe user; --查找mysql数据库中user表的字段

图片

创建一个新用户能被远程连接

1
2
3
4
5
create user 'brian'@'%' identified by 'Password111'; --新建一个用户
flush privileges; --应用一下权限
grant all privileges on *.* to 'brian'@'%'; --添加权限
flush privileges; --应用一下权限
select user, host from user; --查找user这表中数据

图片

测试本机登录是否成功

1
2
3
mysql -u brian -p # 新开一个终端窗口测试登录
# 输入密码后成功登录
exit # 成功后用exit可以退出MySQL的登录

图片

本机测试DBeaver登录是否成功

安装DBeaver,使用flatpak方式。
按照这样的方式为Ubunt安装flatpak:https://flathub.org/setup/Ubuntu

1
2
3
4
5
6
7
8
9
10
# 1、安装flatpak,一般ubuntu22.04默认就安装好
sudo apt install flatpak
# 2、添加官方源,但是官方源会很慢
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# 3、查看一下是不是在用官方镜像源,看看仓库的名字是不是叫flathub
flatpak remotes --show-details
# 4、官方镜像有了之后,再把镜像源换成上海交大的
flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub
# 5、执行安装DBeaver的命令
flatpak install flathub io.dbeaver.DBeaverCommunity

图片
安装好就能在应用列表中找到
图片
新建一个数据库连接
图片
选择MySQL
图片
做一些基础配置

  • 服务器地址:本地就是localhost127.0.0.1,远程就是服务器的IP地址。
  • 用户名和密码:就是上面新建的用户名brian和密码Password111
    图片
    如果用DBeaver出现Public Key Retrieval is not allowed错误,就改一下驱动属性就行
    图片
    连接成功是这样子的
    图片

Windows测试DBeaver登录是否成功

先要配置好/etc/mysql/mysql.conf.dmysqld.cnf文件的一些参数,才能远程登录MySQL的,如下图:
图片

1
2
3
4
5
6
7
8
sudo su #要切换到root用户操作权限可能才足够
cd /etc/mysql #先去到默认的配置文件目录,看看my.cnf的配置
cat my.cnf #看到my.cnf文件里面指向了下一级的两个文件夹,./conf.d/ 和 ./mysql.conf.d/
# 进过查看这两个文件夹,发现./mysql.conf.d/下面的mysqld.cnf有比较完整的配置
#所以就调整mysqld.cnf来达到调整mysql配置的目的
cd mysql.conf.d #继续进入下一层目录
vim mysqld.cnf #编辑这个文件
# 编辑内容看下图

图片

1
2
3
4
5
6
7
8
9
10
11
12
13
# 增加了的部分
[client]
port=3306
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

[mysqld]
port=3306 #解除注释的部分

#增加注释的部分
# bind-address = 0.0.0.0
# mysqlx-bind-address = 0.0.0.0
1
mysqladmin reload # 修改过任何xxx.cnf文件都需要重新reload一下。

在Windows上怎样安装DBeaver和登录就不说了
图片

WARNING
MySQL是一款使用比较复杂的数据库软件,如果使用中有各种报错,需要耐心搜索答案。多问问AI累计经验。

MySQL数据库启停操作

1
2
3
4
systemctl start mysql    # 启动MySQl
systemctl restart mysql # 重启MySQl
systemctl status mysql # MySQl状态
systemctl stop mysql # 关闭MySQL

图片

1
2
3
sudo systemctl is-enabled mysql   # 判断MySQL是不是随系统自启动
# 返回enabled就是自启动
sudo systemctl enable mysql # 如果不是就用这个命令配置成自启动

【推荐】备份还原(mysqldump命令)

备份mysqldump命令

语句:mysqldump -u [mysql登录用户名] -p [密码,可以先不填] > /备份目录/备份文件名.sql

1
2
sudo su # 确保在root用户中执行
mysqldump -u root -p -P 3306 -E -R --single-transaction -B newdb > /home/brian/newdb_backup_241219.sql
  • -u:执行的用户,等效于--user
  • -p:这是小写的p,用户密码,可以空着,等效于--password
  • -P:这里大写的P,代表端口,等效于--port
  • -E:导出事件Events,等效于--events
  • -R:导出存储过程以及自定义函数,等效于--routines
  • --single-transaction:保证导出时数据库的一致性状态
  • -B:导出数据库名,等效于--databases
  • >:指向目标文件目录
  • /备份目录/备份文件名.sql:目标目录和文件名,用.sql作为文件名结尾
    图片
    导出后在目录/home/brian/中形成了文件newdb_backup_241219.sql
    打开查看文件构成,就是通过SQL语句来写入数据。
    (1)创建一个全新数据库
    (2)删除已有表A
    (3)创建全新表A
    (4)导入数据到全新表A
    (5)继续处理其他表B、C、D…
    图片

    注意
    这样的处理,只会处理备份时候就有的表
    而不会删掉备份后新建的表和数据
    所以一般用于新建全新数据库用
    或者还原前需要先删掉原有同名数据库
    说白了就是迁移用的方法

还原mysql命令

如果要还原的数据库已经存在可以先删除

删除方法1:命令行

1
2
mysql -u root -p -P 3306
# 因为上面已经配置过端口3306了,现在登录需要加上端口

图片

1
2
3
4
-- 删除要还原的数据库newdb
DROP database `newdb`; --两条语句效果一样,选其中一条即可
DROP schema `newdb`; --两条语句效果一样,选其中一条即可
show databases; --查找已经有哪些数据,看看newdb是不是不在了

图片
删除方法2:用工具如:DBeaver
图片

还原数据库(正确表述是导入数据库)

1
mysql -u root -p -P 3306 < /home/brian/newdb_backup_241219.sql

图片

备份还原(Navicat工具)

备份数据库

图片
图片

模拟数据被修改

1
2
3
4
5
INSERT INTO 教师 (教师编号, 姓名, 年龄, 学科) 
VALUES
(199, '东方老师', 300, '武学'),
(200, '司马老师', 350, '修仙'),
(201, '诸葛老师', 450, '兵法');

图片

还原数据库

图片
图片
图片
图片

注意
Navicat软件需要收费使用

备份还原(冷备份tar命令)

准备环境数据

(1)先要新建准备一个数据库

1
2
3
4
--登录数据库
mysql -u root -p -P 3306
--创建数据库
CREATE DATABASE test DEFAULT CHARACTER SET UTF8MB4;

(2)查看数据库有没有新建成功

1
2
3
4
5
6
7
8
9
10
11
12
--查看有什么数据库
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)

(3)创建一张表并导入一些数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
USE test; --进入这个数据库
--创建新表【教师】
CREATE TABLE 教师 (
教师编号 INT PRIMARY KEY,
姓名 VARCHAR(50),
年龄 INT,
学科 VARCHAR(100)
);
--插入测试数据
INSERT INTO 教师 (教师编号, 姓名, 年龄, 学科)
VALUES
(101, '张老师', 30, '数学'),
(102, '陈老师', 31, '语文'),
(103, '王老师', 32, '英语');

查看这个表是否建立成功。

1
2
3
4
5
6
7
8
9
SELECT * FROM test.教师;
+--------------+-----------+--------+--------+
| 教师编号 | 姓名 | 年龄 | 学科 |
+--------------+-----------+--------+--------+
| 101 | 张老师 | 30 | 数学 |
| 102 | 陈老师 | 31 | 语文 |
| 103 | 王老师 | 32 | 英语 |
+--------------+-----------+--------+--------+
3 rows in set (0.01 sec)

开始备份

(4)确认数据库存放的位置

1
2
3
4
5
6
7
8
9
10
--查找数据库的文件位置
SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)
--用exit命令离开MySQL
exit

来到/var/lib/mysql/查看test这个新建的库是不是在里面。

1
2
3
4
5
6
7
8
9
root@DESKTOP-FH09R9R:/# cd /var/lib/mysql/
root@DESKTOP-FH09R9R:/var/lib/mysql# ls
'#ib_16384_0.dblwr' binlog.000002 client-cert.pem mysql.ibd test
'#ib_16384_1.dblwr' binlog.000003 client-key.pem performance_schema undo_001
'#innodb_redo' binlog.000004 debian-5.7.flag private_key.pem undo_002
'#innodb_temp' binlog.000005 ib_buffer_pool public_key.pem
DESKTOP-FH09R9R.pid binlog.index ibdata1 server-cert.pem
auto.cnf ca-key.pem ibtmp1 server-key.pem
binlog.000001 ca.pem mysql sys

图片
(5)关闭数据库

1
2
root@DESKTOP-FH09R9R:/# service mysql stop
* Stopping MySQL database server mysqld [ OK ]

(6)用tar命令来把整个/var/lib/mysql/文件夹压缩起来,放在/opt/里面

1
2
3
4
5
tar czf /opt/mysql_all_$(date +%F).tar.gz /var/lib/mysql/

root@DESKTOP-FH09R9R:/var/lib/mysql# cd /opt/
root@DESKTOP-FH09R9R:/opt# ls
mysql_all_2024-03-22.tar.gz [ OK ]
1
2
3
4
5
6
7
8
9
#查看压缩的文件内容
root@DESKTOP-FH09R9R:/opt# tar -tf mysql_all_2024-03-22.tar.gz
# 发现包含了目录var/lib/mysql/。这个目录是在/的下面的,即根目录
var/lib/mysql/
var/lib/mysql/#ib_16384_0.dblwr
var/lib/mysql/#ib_16384_1.dblwr
var/lib/mysql/#innodb_redo/
var/lib/mysql/#innodb_redo/#ib_redo10_tmp
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--模拟备份后的数据修改,写入三条新数据
mysql> INSERT INTO 教师 (教师编号, 姓名, 年龄, 学科)
-> VALUES
-> (104, '何老师', 40, '生物'),
-> (105, '黄老师', 41, '地理'),
-> (106, '李老师', 42, '历史');
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM 教师; --比备份前增加了三行数据
+--------------+-----------+--------+--------+
| 教师编号 | 姓名 | 年龄 | 学科 |
+--------------+-----------+--------+--------+
| 101 | 张老师 | 30 | 数学 |
| 102 | 陈老师 | 31 | 语文 |
| 103 | 王老师 | 32 | 英语 |
| 104 | 何老师 | 40 | 生物 |
| 105 | 黄老师 | 41 | 地理 |
| 106 | 李老师 | 42 | 历史 |
+--------------+-----------+--------+--------+
6 rows in set (0.00 sec)

还原数据

1
2
tar xzf /opt/mysql_all_2024-03-22.tar.gz -C /
# 因为tar文档中含有var/lib/mysql/目录,所以要解压在/根目录。
1
systemctl start mysql    # 还原后启动MySQL看看成功没有

还原后,就剩下3行数据了,证明还原成功。
图片

DBeaver使用小技巧

创建数据库

图片
图片
图片

创建表

图片
图片
图片
点了保存并执行了创建表的语句才是完成了
图片

1
2
3
4
5
6
7
CREATE TABLE `ClassesList` (
`ClassNum` varchar(100) NOT NULL,
`ClassName` varchar(100) NOT NULL,
`ClassDate` date NOT NULL,
`BeginTime` time NOT NULL,
`EndTime` time NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

导入数据(SQL语句)

先写好一段SQL插入数据

1
2
3
4
5
INSERT INTO ClassesList (ClassNum , ClassName , ClassDate , BeginTime , EndTime)
VALUES
('C241219001', '语文课', '2024-12-19', '8:30', '9:10'),
('C241219002', '数学课', '2024-12-19', '9:25', '10:05'),
('C241219003', '英语课', '2024-12-19', '10:20', '11:00');

图片
通过查看表看到数据是否被导入
图片
或者通过SELECT语句来确认
图片

导入数据(CSV文件)

先用EXCEL或WPS准备一个CSV UTF-8的文件,如图
图片
在表上点击右键选择【导入数据】
图片
选择这个CSV文件
图片
预览一下是否正确
图片
这一步选【继续】就行
图片
成功新增了三行数据
图片

导出数据(不是备份)

首选要配置好【编辑链接】
图片
就是把本地客户端Linux的是在/usr/bin/目录中
图片
这样就可以做【转储数据库】了
图片
其实就是形成一个数据导入的SQL语句
图片

二进制文件安装使用(CentOS Stream 9)

下载MySQL

官网下载链接:https://dev.mysql.com/downloads/mysql/
图片
当然下载很慢,我选择用sftp工具借用ssh登录来上传了
图片

安装依赖

这里开始所有命令操作都用root用户完成,包括Linux和MySQL

1
2
3
yum install libaio # 这是官方的安装语句
yum -y install libaio perl perl-devel #这是我的安装语句,建议选我这一句
# 如果后面还是出现了依赖问题,后面会提到解决方案

图片

创建一个目录并把MySQL安装文件放进去

1
2
# 创建这个目录
mkdir -p /mysql/data

图片
并把下载的MySQL文件丢进去/mysql/
图片

创建mysql新用户和用户组

1
2
3
groupadd mysql  # 创建一个叫mysql的组
useradd -r -g mysql -s /bin/false mysql # 创建一个叫mysql的用户
id mysql # 查看这个组和用户是否创建成功

图片

解压MySQL文件

1
2
3
4
5
6
# 进入目录/usr/local
cd /usr/local
# 解压MySQL包到这个目录
tar -xvf /mysql/mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz
# 解压出来的文件夹名字改名为mysql
mv mysql-8.0.34-linux-glibc2.12-x86_64 mysql

图片

mysql文件夹授权给mysql用户

1
2
chown -R mysql:mysql /mysql            #根目录的/mysql/
chown -R mysql:mysql /usr/local/mysql #安装路径的/usr/local/mysql/

图片
图片

创建my.cnf文件

1
2
cd /etc/   # 去到/etc/目录
vim my.cnf # 创建一个叫my.cnf的文件,并写入配置数据

图片
参考my.cnf文件内容,如无特殊必要,按照我的来配置就基本没错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#####################################################
# 这部分配置影响所有MySQL客户端程序的行为,如连接端口、字符集等。
#####################################################
[client]
# 客户端使用的端口
port=3306
# 客户端使用的字符集,一般都是用utf8mb4
default-character-set=utf8mb4
# 套接字,不知道是干啥的,这就是默认值
socket=/tmp/mysql.sock

#############################
# 影响mysql命令行客户端的默认行为。
#############################
[mysql]
# 字符集,一般都是用utf8mb4
default-character-set=utf8mb4

###########################################################################################
# 这是MySQL服务器的主要配置段,大部分与服务相关的设置都在这里,包括数据存储路径、缓冲池大小、线程数、日志设置等。
###########################################################################################
[mysqld]
# 127.0.0.1 可以绑定ip地址或者仅允许本地访问,默认情况下我们只接受来自主机的连接,一般注释了,允许远程连接
#bind-address = 127.0.0.1

# 服务端使用的端口
port=3306

# 字符集,一般都是用utf8mb4
character-set-server=utf8mb4

# basedir是MySQL程序安装目录路径
basedir=/usr/local/mysql/

# datadir是MySQL存放数据的目录路径
datadir=/mysql/data/

# 临时目录:在执行查询和处理数据时,可能会创建临时文件来存储中间结果或排序数据等。
# tmpdir=/mysql/data/temp/

# 套接字,不知道是干啥的,这就是默认值
socket=/tmp/mysql.sock

# MySQL进程ID存储位置
pid-file=/mysql/data/brian.mysql.pid

################
# 通用和慢查询日志
################
# 日志写入文件(FILE)中,而不是表(TABLE)中,
log-output=FILE
# 通用日志,客户端的连接和断开、所有执行的SQL语句,0-禁用,1-启用
general-log=0
general_log_file=/mysql/data/brian-mysql-8.0-general.log
# 慢查询日志,慢查询日志会记录执行时间超过指定阈值的SQL语句,0-禁用,1-启用
slow-query-log=1
slow_query_log_file=/mysql/data/brian-mysql-8.0-slow.log
# 慢查询的阈值时间(秒),10就是超过十秒就是慢查询
long_query_time=10

# 登录错误日志
log-error=/mysql/data/brian-mysql-8.0.err

# 在mysql8.0以上版本默认为caching_sha2_password,为了与mysql5.7版本兼容,设为mysql_native_password
default_authentication_plugin=mysql_native_password


#################
# 连接方法用INNODB
#################
default-storage-engine=INNODB
# INNODB连接日志最大是1GB
innodb_log_file_size=1G
# 当表空间文件需要扩展时,它会每次增加64MB。
innodb_autoextend_increment=64
# 那么InnoDB缓冲池将被分割成8个相等的部分(或实例)。每个实例都可以独立地管理其内部的缓存数据,从而提高并发访问的效率。
innodb_buffer_pool_instances=8
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
innodb_open_files=300
# 每个InnoDB表是否使用独立的表空间文件
innodb_file_per_table=1
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,
# 所以不要设置的太高.
innodb_buffer_pool_size=4G
# 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能
innodb_flush_log_at_trx_commit=1
# 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间
innodb_log_buffer_size=16M


# 最大链接数
max_connections=600
#最大链接错误
max_connect_errors=100
# 用于指定MySQL服务器端和客户端在一次传送数据包的过程中最大允许的数据包大小。这里的 64M 表示最大数据包大小为64兆字节(MB)。
max_allowed_packet=64M

# MySQL支持4种事务隔离级别,他们分别是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED
transaction_isolation=READ-COMMITTED

# 默认时区
default-time-zone='+8:00'
# 使用当前系统的时间作为时间戳,并将其转换为系统时区。
log_timestamps=system

#表示表名是否大小写敏感,0-敏感;1-不敏感
lower_case_table_names=1

# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64
table_open_cache=2000

# MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。
tmp_table_size=512M

# 内存管理:用于设置索引块缓存的大小
# key_buffer_size 的值不应超过系统总内存的25%,以避免影响操作系统和其他服务的性能。
key_buffer_size=512M

授权mysql用户的my.cnf权限

1
chown mysql:mysql /etc/my.cnf

图片

初始化MySQL程序

1
2
# 初始化的目录在/usr/local/mysql/bin/目录下的mysqld程序
cd /usr/local/mysql/bin

图片

1
2
# 使用这条语句来初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/mysql/data/ --user=mysql --initialize
  • 基于/etc/my.cnf来初始化,是前面新建的文件
  • 程序目录在/usr/local/mysql/,是前面新建的目录
  • 数据目录在/mysql/data/,是前面新建的目录
  • 用户是mysql,是前面新建的用户
  • --initialize,就是开始初始化命令
    图片
    1
    2
    3
    4
    5
    # 查看初始化密码
    cat /mysql/data/brian-mysql-8.0.err
    # 这个文件是my.cnf中的其中一个配置指定的
    # [mysqld]
    # log-error=/mysql/data/brian-mysql-8.0.err
    得到初始化密码为:kX4tTSFSh)mt
    图片

如果你想要再次初始化
(1)停掉MySQL:systemctl stop mysqld
(2)删掉数据目录:sudo rm -rf /mysql/data/
(3)重新执行初始化语句即可

配置systemd服务(systemctl命令)-非必须,但是方便以后使用

1
2
# 新建一个/etc/systemd/system/mysqld.service来存放systemd配置
vim /etc/systemd/system/mysqld.service

写入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[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
Type=notify
TimeoutSec=0
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
PIDFile=/mysql/data/brian.mysql.pid
EnvironmentFile=-/etc/sysconfig/mysql
LimitNOFILE=65535
Restart=on-failure
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
1
2
3
4
# 重新读一下systemd配置
systemctl daemon-reload
systemctl start mysqld # 尝试启动MySQL
systemctl status mysqld # 查看是否启动成功

图片

1
2
3
systemctl stop mysqld     # 关闭MySQL
systemctl restart mysqld # 重启MySQL
systemctl enable mysqld # 开机启动MySQL

尝试登录MySQL问题汇总

警告1:mysql: [Warning] Using a password on the command line interface can be insecure.

图片

1
2
3
# 执行里面的mysql程序并带一下参数
/usr/local/mysql/bin/mysql -uroot -p
# -p后面应该紧跟密码的,但是有时候需要手动输入,不允许带上。

错误2:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

图片
报了如上错误是因为上面的systemctl start mysqld没有把MySQL正确启动,需要检查/etc/systemd/system/mysqld.service的配置。或者直接用sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &语句来启动MySQL也行。

1
2
3
4
5
# 改成这样启动的MySQl就不会有错误
sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &
# 缺点:这个终端不能干别的事情了,要一直挂着,要新的终端来干别的事情。
pgrep mysqld # 这个语句可以判断有没有启动mysql
ps aux | grep mysqld # 这个语句也可以判断有没有启动mysql

图片

错误3:/apps/mysql/bin/mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

图片

1
2
sudo yum reinstall ncurses ncurses-devel ncurses-libs
# AI给出的解决方法是:尝试安装ncurses来解决依赖问题

但是:CentOS Stream 9只有libtinfo.so.6可以安装,没有libtinfo.so.5。
如果没有解决问题,请看下一种解决方法
图片
AI给出了第二种解决方法,就是做一个软连接

1
2
3
sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
# 建立起libtinfo.so.6和libtinfo.so.5的软连接
sudo find /usr/lib64 -name libtinfo.so* # 查看是否建立成功

图片

这个命令在 /usr/lib64/ 目录下创建了一个名为 libtinfo.so.5 的文件,但这个文件实际上是一个指向 libtinfo.so.6 的链接。当系统或某个程序尝试加载 libtinfo.so.5 时,它会被重定向到 libtinfo.so.6。

这是官方的解决方法:没有测试过。
图片

1
yum install ncurses-compat-libs

错误4:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

1
2
3
4
# 首次登录MySQL
/usr/local/mysql/bin/mysql -uroot -p
# 输入/mysql/data/brian-mysql-8.0.err里面找到的密码 kX4tTSFSh)mt
# 成功登录

但是发现这时候还不能做修改root密码以外的任何操作
图片

1
2
3
4
5
6
-- 首次登录必须要修改root密码,不然啥都干不了,还会报错
ALTER USER 'root'@'localhost' IDENTIFIED BY 'brianpw123456';
-- 修改完就应用权限
flush privileges;
-- 以后用这个命令就能登录
/usr/local/mysql/bin/mysql -uroot -pbrianpw123456

可以开始配置和使用MySQL了,如:创建一个新的MySQL用户,可以用于远程连接。
图片