在国产的操作系统上,需要部署MySQL,于是网上开始搜资料,各种各样的资料特别多,还满心欢喜觉得这下靠谱。结果没想到,看了很多资料,操作都很繁琐,洋洋洒洒上千行字的看得眼花缭乱。于是筛选了一些资料试着操作一下,切换了五六份资料,每一份都有靠谱的和不靠谱的地方,整合一下十来分钟整完全部步骤。
本来是想着像做欧拉系统的MySQL那样,采用离线安装的方式,后来想想,电脑都能联网的那我还离线干啥?不如干脆看看能不能在线装。
网上看到有通过软件商城安装的。之前有试过,但是有三个问题一直困扰着我:
第一个是,安装完后在系统里执行mysql提示找不到这个命令;
第二个是,安装后需要修改/etc/my.inf里面的数据,但是由于系统没有开放root权限给我,我没有修改根目录下文件的权限;
第三个是,更让我觉得“怀疑”的地方,安装包只有8k,这么小的安装包“一定”不可能是整个数据库的,要知道,MySQL官方离线安装包的服务端就八百多兆了。
基于这几个点,我一直没用商店的做安装。但是最后,我还是通过软件商店成功安装并启动,顺带打了一巴掌自己脸。
步骤一:打开软件商城
并搜索MySQL,安装“MySQL服务器”和“MySQL工作台”。
步骤二:重启电脑,reboot!
步骤三:打开终端:
①执行mysql --version查看版本
mysql Ver 8.0.33-0kylin0.20.04.2k0.1 for Linux on aarch64 ((Ubuntu))
系统安装的版本是8.0.33的麒麟版。原来我之前安装那次,提示mysql指令不存在,是因为没有重启系统???
②启动mysql:
还是在终端里,执行sudo systemctl start mysql,提示输入本机的登录密码,输入完毕后mysql服务就已经启动了。
步骤四:进入mysql
由于我们没有root账号密码。正常的,我们是需要去做一些破解修改密码操作(即,修改/ect/my.inf文件)来达到免密登录mysql再进行修改,但是我发现这边它安装完后在/etc/目录下不存在my.inf文件,反倒是,在/ext/下有一个mysql子目录,在这个子目录下有my.inf文件---不变的是,它依然是一个readonly文件。
其实,也没那么麻烦,直接又是一条指令:
sudo mysql
就这么简单直接可以进入到mysql命令模式下了...
步骤五:修改mysql中root的密码
在原始mysql下的账户是,root的host是localhost的。我直接删掉root账户,然后再自己创建一个root@%的账户。(这里埋下了个雷!建议跳过这里的①②③操作,直接修改密码,然后update一下mysql.user的表,把host地址从localhost改为%。这个雷的处理方法在文末更新里有提到了的)
①执行命令删除账号:
delete from mysql.user where user='root';
②执行命令创建账号:
create user 'root';
③先查看一下创建情况:
select user,host from mysql.user;
可以看到,有了一个root账号,host是%的
④修改root账号的密码:
alter user 'root'@'%' identified by 'root';
附:我猜应该都可以采用不删除再增加账号,直接修改root的host为%,然后直接再修改一下密码就完事了。
步骤六:权限授予。
诶,奇怪了,这新建的账号,默认的权限就是*.*的,所以我都没修改权限。
权限的授予方式是:
grant all privileges on *.* to 'root'@'%'
查看权限的方式是:
show grants for 'root'@'%';
至此,mysql内部的配置全部完成!
步骤七:配置自启动。
首先查看一下是否设置了开机自动启动,在命令行模式下输入
systemctl is-enabled mysql
直接返回了enabled,额,都不用配置已经搞掂了....
如果没自动设置自启动,那就执行chkconfig mysqld on也可以实现。
整个流程下来,包括查资料,仅仅十来分钟就搞掂全部工作了,真的是快到我自己都不相信...
2024.03.14更新
今天琢磨配个数据库然后用起来,愉快的登录了root账户,好吧,悲剧来了,无论执行什么操作,都提示没有权限...网上搜寻了一大堆,后来我想想,应该估计是我当时配置的时候,没有把权限调成Y!
所以只好再配置一次相关设置。由于这时候我的root账户已经被“锁了”,能进去,啥也干不了,那只能是进跳过验证进去做一些操作。
1.咔嚓掉mysql服务:
systemctl stop mysql
2.跳过安全检查进入
mysqld_safe --skip-grant-tables &
3.额,报错了,说是mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.于是乎创建一个
①创建:sudo mkdir /var/run/mysqld
②获取权限:sudo chown -R mysql:mysql /var/run/mysqld
4.继续执行第二个步骤进入
5.新开一个shell,登录进去:
mysql -u root
6.开始为所欲为了!先查看一下权限:
select * from user\G;
7.果不其然,都是N啊!
就是这破玩意儿搞得鬼!~我怀疑是因为我前面删了root然后重建root账户,这个账户就没有权限(之前只是配置了*.*的数据库访问权限,但是没有配置操作权限的原因?不晓得,反正干就是了!)
就是这张表出了问题,改!
8.执行一下指令,把所有的N都改为Y!
update mysql.user set Select_priv='Y' where user='root';
update mysql.user set Insert_priv='Y' where user='root';
update mysql.user set Update_priv='Y' where user='root';
update mysql.user set Delete_priv='Y' where user='root';
update mysql.user set Create_priv='Y' where user='root';
update mysql.user set Drop_priv='Y' where user='root';
update mysql.user set Reload_priv='Y' where user='root';
update mysql.user set Shutdown_priv='Y' where user='root';
update mysql.user set Process_priv='Y' where user='root';
update mysql.user set File_priv='Y' where user='root';
update mysql.user set Grant_priv='Y' where user='root';
update mysql.user set References_priv='Y' where user='root';
update mysql.user set Index_priv='Y' where user='root';
update mysql.user set Alter_priv='Y' where user='root';
update mysql.user set Show_db_priv='Y' where user='root';
update mysql.user set Super_priv='Y' where user='root';
update mysql.user set Create_tmp_table_priv='Y' where user='root';
update mysql.user set Lock_tables_priv='Y' where user='root';
update mysql.user set Execute_priv='Y' where user='root';
update mysql.user set Repl_slave_priv='Y' where user='root';
update mysql.user set Repl_client_priv='Y' where user='root';
update mysql.user set Create_view_priv='Y' where user='root';
update mysql.user set Show_view_priv='Y' where user='root';
update mysql.user set Create_routine_priv='Y' where user='root';
update mysql.user set Alter_routine_priv='Y' where user='root';
update mysql.user set Create_user_priv='Y' where user='root';
update mysql.user set Event_priv='Y' where user='root';
update mysql.user set Trigger_priv='Y' where user='root';
update mysql.user set Create_tablespace_priv='Y' where user='root';
update mysql.user set Create_role_priv='Y' where user='root';
update mysql.user set Drop_role_priv='Y' where user='root';
一气呵成,重启一下下电脑先~