mysql-debain安装
引子
最近想在自己玩客云中做一个网页版本的日记记录,能实现数据保存和随机读取推荐的功能,这就打算使用MySQL数据库来保存。
实现的方案是:VUE+MySQL+PHP等,这样就基本能实现数据保存和读取了。
同时也能为以后各种数据保存跟远程读取打下基础。
而且现在也能实现了内网穿透,基本上把前后端打通。
开始实验了很多次,然而,由于这个CPU使用的是ARM架构,所以基本都会报错,最后是使用了 mariadb 来实现相应功能
安装mysql
使用如下命令查询当前linux发行版的信息:
1 | lsb_release -a |
安装mariadb之后依旧是使用mysql命令,它是mysql的分支而已
配置root的密码
sudo mysql_secure_installation
- 然后提示 Set root password? [Y/n],输入Y
- 然后输入两次mysql数据库的密码,此密码会被设置为mysql root的密码
- 然后一路回车即可
配置登录
这里通过配置解决ERROR 1698 (28000): Access denied for user ‘root’@’localhost’报错,详细参考:
https://blog.csdn.net/jlu16/article/details/82809937
首先登陆:
1 | sudo mysql -u root |
然后在mysql中输入:
1 | USE mysql; |
可以看到:
1 | +------------------+---------------------------------+ |
此时输入:
1 | UPDATE user SET plugin='mysql_native_password' WHERE User='root'; |
然后在命令行中输入:
1 | sudo service mysql restart |
无法登录的问题
设置好后输入
1 | sudo mysql -u root |
还是会报错
1 | ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) |
这个是因为设置了密码导致拒绝访问,需要在命令行中添加密码选项
1 | sudo mysql -u root -p |
然后根据提示输入正确密码即可。
权限问题(目前只是本机访问要求就不做其他了)
一、查看3306端口是否开放
1 | netstat -an|grep 3306 |
如果看到下图这样的,说明端口并未打开:
二、修改访问权限
1 | vim /etc/mysql/mysql.conf.d/mysqld.cnf |
注意上图中的第一行红色的注释:
“By default we only accept connections from localhost”,这几句话的意思是说“在默认情况下我们只允许本地服务访问MySQL”,
所以我们需要注释掉下方那条配置,直接在它前面加上一个井号即可:
1 | # bind-address = 127.0.0.1 |
如下图所是,这条配置也变成了注释:
拓展一下思路,如果我们出于安全考虑,希望限制只有某台应用服务器可以访问MySQL的话,那么其实就需要调整这条配置项就可以了。
三、修改端口号
还是这个配置文件,看到这个配置文件的中间部分的配置项:
我们需要在其中增加一条端口配置:
1 | port = 3306 |
加完以后整个配置文件看起来是这样的:
修改完文件之后记得保存。
四、开放root账户的访问权限
在第三步中,我们仅仅只是取消了本地访问限制,但是我们还是没有对账户权限进行设置。
重启MySQL服务,并进入MySQL控制台:
1 | service mysql stop |
**切换到系统数据库“mysql”中: **
1 | use mysql; |
查看一下该数据库中的所有的表:
1 | show tables; |
我们要修改上图中的最后一张表“user”,看一下这张表有哪些字段:
1 | desc user; |
字段非常多,就不一一罗列了。我们要用到的只是“Host”和“User”两个字段而已:
1 | select host,user from user; |
在这张表里,我们看到root用户仅仅只能在本地访问MySQL服务,所以我们要把它修改为“%”,意思是无论在哪里root账户都能够访问数据库服务:
1 | update user set host='%' where user='root'; |
注意,在真实的生产环境中,并不建议这么修改,因为安全风险太大。我建议根据实际情况将root用户的host项修改为某个指定的ip地址,或仍然保持localhost
一般情况下 最后一项可以不设置,不看。
最后一项设置,开放root账户所有权限:
1 | grant all privileges on *.* to 'root'@'%' identified by '你的root账户密码'; |
使各种权限设置立即生效:
1 | flush privileges; |
五、再次确认3306端口状态
1 | netstat -an|grep 3306 |
如果看到下图这样,就可以了:
ERROR 1045 (28000) 错误处理
一、问题:
ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ (using password: YES)
相信很多刚刚在Linux上装MySQL的用户都会遇到这个问题,到底该怎么解决呢?我在stackoverflow上查找到了答案(我使用了方法1并且十分有效),搬运过来顺便翻译成中文。
原文地址:https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost
回答:
原因是因为在最近的Ubuntu安装(当然也可能是其他安装)中,MySQL默认使用了UNIX auth_socket plugin插件。
简单来说这意味着当db_users使用数据库时,将会通过系统用户认证表进行认证。你可以通过下面的命令看看你的root用户是否设置成了这样:
1 | $ sudo mysql -u root # I had to use "sudo" since is new installation |
就像你在查询语句中看到的那样,root用户在使用auth_socket插件。有两种方法来解决这个问题:
1. 你可以设置你的root用户使用mysql_native_password插件 2. 你可以创建一个与你的系统用户一致的新的数据库用户(推荐)
(笔者注:方法2即满足auth_socket插件的要求)
选择1:
1 | $ sudo mysql -u root # I had to use "sudo" since is new installation |
选择2( 用你的操作系统用户名代替YOUR_SYSTEM_USER) :
1 | $ sudo mysql -u root # I had to use "sudo" since is new installation |
记住如果你选择使用方法2,你应该通过使用你的操作系统用户名来连接到MySQL(mysql -u YOUR_SYSTEM_USER)。
注意:在一些操作系统中(例如Debian系)‘auth_socket’插件被叫做’unix_socket’,所以相应的SQL命令语句应该为UPDATE user SET plugin=‘unix_socket’ WHERE User=‘YOUR_SYSTEM_USER’。
二、原因:
错误 1045 (28000):用户“root”@“本地主机”的访问被拒绝(使用密码:是)
简单的说,就是用户root没有使用权限。:
(1) MySQL服务器停止
(2)密码输入错误
三、解决方法:
(1)若MySQL已经没有启动,重启MySQL服务器
1 | systemctl restart mysqld |
或者
1 | systemctl restart mariadb |
(2)修改密码
- 修改/etc/my.cnf文件,在[mysqld]中添加skip-grant-tables(登录时跳过权限检查)
1 | vi /etc/my.cnf |
1 | skip-grant-tables |
重启数据库(同上)
修改密码
先登录mysql
1 | mysql -uroot -p |
会让你输入密码,直接点击回车即可。
输入use mysql
1 | use mysql |
设置密码
【MySQL密码不好设置,可以跟我一样设置密码为:Abcdefg@123】
方法一:
1 | set password for `root`@`localhost`=password('Abcdefg@123'); |
【问题解决】
如果遇到
ERROR 1290 (HY000): The MariaDB server is running with the –skip-grant-tables option so it cannot execute this statement
输入flush privileges;
1 | flush privileges; |
接下来再次输入set password for root
@localhost
=password(‘Abcdefg@123’);即可
1 | set password for `root`@`localhost`=password('Abcdefg@123'); |
方法二:
1 | update mysql.user set authentication_string ='Abcdefg@123' where user="root"; |
4.退出
1 | exit |
5.将my.cnf中的skip-grant-tables去除
1 | vi /etc/my.cnf |
6.重启服务
1 | systemctl restart mysqld |
或者
1 | systemctl restart mariadb |
7.登录
使用修改后的密码登录即可。
** 普及:**
不输入密码显示:
ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ (using password: NO)
相关链接
Linux安装mysql(解决E: Package ‘mysql-server‘ has no installation candidate与ERROR 1698 (28000))
MySQL登录报错 ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
解决 MySQL 的 ERROR 1698 (28000): Access denied for user ‘root‘@’localhost’
ERROR 1698 (28000): Access denied for user ‘root‘@’localhost’
欢迎到公众号来唠嗑: