MySQL的安装使用备份还原
安装使用(Ubuntu22.04 apt)
这一章是基于Ubuntu22.04LTS版,使用apt命令安装。
查看有没有安装过MySQL软件
1 | sudo su # 先切换到root用户 |

查找能安装哪一个版本的MySQL
Ubuntu的库中有很多款MySQL,要准确知道安装是哪一个版本要注意一下,最好先上网搜索一下各版本区别。
1 | apt list --all-versions | grep "mysql" #看看有哪些版本的mysql可以安装 |

安装MySQL
1 | apt install mysql-server-8.0 #进行安装 |


首次登录MySQL
1 | mysql -v #这就登录进去了? |

查看MySQL中有哪些数据库
1 | show databases; --查找已经有哪些数据库 |

查看MySQL中有哪些用户
1 | use mysql; --先切换到mysql这个数据库 |

查看mysql库中有哪些表?
- MySQL是数据库软件
- mysql是软件中的其中一个库
1
2use mysql; --确保已经切换到mysql这个数据库
show tables; --查找出mysql库中有什么表
查看mysql库中的user表有哪些字段
1 | use mysql; --确保已经切换到mysql这个数据库 |

创建一个新用户能被远程连接
1 | create user 'brian'@'%' identified by 'Password111'; --新建一个用户 |

测试本机登录是否成功
1 | mysql -u brian -p # 新开一个终端窗口测试登录 |

本机测试DBeaver登录是否成功
安装DBeaver,使用flatpak方式。
按照这样的方式为Ubunt安装flatpak:https://flathub.org/setup/Ubuntu
1 | # 1、安装flatpak,一般ubuntu22.04默认就安装好 |

安装好就能在应用列表中找到
新建一个数据库连接
选择MySQL
做一些基础配置
- 服务器地址:本地就是
localhost或127.0.0.1,远程就是服务器的IP地址。 - 用户名和密码:就是上面新建的用户名
brian和密码Password111。
如果用DBeaver出现Public Key Retrieval is not allowed错误,就改一下驱动属性就行
连接成功是这样子的
Windows测试DBeaver登录是否成功
先要配置好/etc/mysql/mysql.conf.d中mysqld.cnf文件的一些参数,才能远程登录MySQL的,如下图:
1 | sudo su #要切换到root用户操作权限可能才足够 |

1 | # 增加了的部分 |
1 | mysqladmin reload # 修改过任何xxx.cnf文件都需要重新reload一下。 |
在Windows上怎样安装DBeaver和登录就不说了
WARNING
MySQL是一款使用比较复杂的数据库软件,如果使用中有各种报错,需要耐心搜索答案。多问问AI累计经验。
MySQL数据库启停操作
1 | systemctl start mysql # 启动MySQl |

1 | sudo systemctl is-enabled mysql # 判断MySQL是不是随系统自启动 |
【推荐】备份还原(mysqldump命令)
备份mysqldump命令
语句:mysqldump -u [mysql登录用户名] -p [密码,可以先不填] > /备份目录/备份文件名.sql
1 | sudo su # 确保在root用户中执行 |
-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 | mysql -u root -p -P 3306 |

1 | -- 删除要还原的数据库newdb |

删除方法2:用工具如:DBeaver
还原数据库(正确表述是导入数据库)
1 | mysql -u root -p -P 3306 < /home/brian/newdb_backup_241219.sql |

备份还原(Navicat工具)
备份数据库


模拟数据被修改
1 | INSERT INTO 教师 (教师编号, 姓名, 年龄, 学科) |

还原数据库




注意
Navicat软件需要收费使用
备份还原(冷备份tar命令)
准备环境数据
(1)先要新建准备一个数据库
1 | --登录数据库 |
(2)查看数据库有没有新建成功
1 | --查看有什么数据库 |
(3)创建一张表并导入一些数据
1 | USE test; --进入这个数据库 |
查看这个表是否建立成功。
1 | SELECT * FROM test.教师; |
开始备份
(4)确认数据库存放的位置
1 | --查找数据库的文件位置 |
来到/var/lib/mysql/查看test这个新建的库是不是在里面。
1 | root@DESKTOP-FH09R9R:/# cd /var/lib/mysql/ |

(5)关闭数据库
1 | root@DESKTOP-FH09R9R:/# service mysql stop |
(6)用tar命令来把整个/var/lib/mysql/文件夹压缩起来,放在/opt/里面
1 | tar czf /opt/mysql_all_$(date +%F).tar.gz /var/lib/mysql/ |
1 | #查看压缩的文件内容 |
1 | --模拟备份后的数据修改,写入三条新数据 |
还原数据
1 | tar xzf /opt/mysql_all_2024-03-22.tar.gz -C / |
1 | systemctl start mysql # 还原后启动MySQL看看成功没有 |
还原后,就剩下3行数据了,证明还原成功。
DBeaver使用小技巧
创建数据库



创建表



点了保存并执行了创建表的语句才是完成了
1 | CREATE TABLE `ClassesList` ( |
导入数据(SQL语句)
先写好一段SQL插入数据
1 | INSERT INTO ClassesList (ClassNum , ClassName , ClassDate , BeginTime , EndTime) |

通过查看表看到数据是否被导入
或者通过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 | yum install libaio # 这是官方的安装语句 |

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

并把下载的MySQL文件丢进去/mysql/
创建mysql新用户和用户组
1 | groupadd mysql # 创建一个叫mysql的组 |

解压MySQL文件
1 | # 进入目录/usr/local |

mysql文件夹授权给mysql用户
1 | chown -R mysql:mysql /mysql #根目录的/mysql/ |


创建my.cnf文件
1 | cd /etc/ # 去到/etc/目录 |

参考my.cnf文件内容,如无特殊必要,按照我的来配置就基本没错
1 | ##################################################### |
授权mysql用户的my.cnf权限
1 | chown mysql:mysql /etc/my.cnf |

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

1 | # 使用这条语句来初始化 |
- 基于
/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.errkX4tTSFSh)mt
如果你想要再次初始化
(1)停掉MySQL:systemctl stop mysqld
(2)删掉数据目录:sudo rm -rf /mysql/data/
(3)重新执行初始化语句即可
配置systemd服务(systemctl命令)-非必须,但是方便以后使用
1 | # 新建一个/etc/systemd/system/mysqld.service来存放systemd配置 |
写入如下代码:
1 | [Unit] |
1 | # 重新读一下systemd配置 |

1 | systemctl stop mysqld # 关闭MySQL |
尝试登录MySQL问题汇总
警告1:mysql: [Warning] Using a password on the command line interface can be insecure.

1 | # 执行里面的mysql程序并带一下参数 |
错误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 | # 改成这样启动的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 | sudo yum reinstall ncurses ncurses-devel ncurses-libs |
但是:CentOS Stream 9只有libtinfo.so.6可以安装,没有libtinfo.so.5。
如果没有解决问题,请看下一种解决方法
AI给出了第二种解决方法,就是做一个软连接
1 | sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5 |

这个命令在 /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 | # 首次登录MySQL |
但是发现这时候还不能做修改root密码以外的任何操作
1 | -- 首次登录必须要修改root密码,不然啥都干不了,还会报错 |
可以开始配置和使用MySQL了,如:创建一个新的MySQL用户,可以用于远程连接。