centos 登录mysql,centos怎么登录
centos怎么修改mysql密码
做服务器运维,修改 MySQL的密码是经常的需要,定期修改 MySQL密码是网站安全的一个保证。这里记录一下修改 MySQL密码的一些命令,方便以后查看。
修改root密码
CentOS下 MySQL管理员帐号默认是 root用户,密码为空。如果你从没设置过 MySQL的密码,使用 root用户来连接 MySQL服务器不需要输入密码。
第一次设置root密码可以使用以下命令:
mysqladmin-u root password NEWPASSWORD
如果你已经设置过密码了,需要要以下命令:
mysqladmin-u root-p'oldpassword' password newpass
比如说,旧密码是“12345”,新密码是“nowamagic”,执行以下命令:
mysqladmin-u root-p'12345' password'nowamagic'
修改其它MySQL用户的密码
修改一个普通用户的密码你可以使用以下命令,比如用户是 nmuser:
mysqladmin-u nmuser-p oldpassword password newpass
另一种修改密码的方法是,MySQL服务器把用户名和密码储存在 MySQL数据库的 user表中。你可以使用以下方法来直接更新用户 nmuser的密码:
1.登录mysql服务器:
mysql-u root-p
2.选择 MySQL数据库
mysql> use mysql;
3.修改 nmuser密码
mysql> update user set password=PASSWORD("NEWPASSWORD") where User='nmuser';
4.重置权限
mysql> flush privileges;
mysql> quit
这种方法也可以用脚本(PHP,Perl)执行,不用SSH到服务器。
CentOS7和CentOS6怎样开启MySQL远程访问
1.开放MySQL访问端口3306
修改防火墙配置文件
vi/etc/sysconfig/iptables
加入端口配置
-A INPUT-m state--state NEW-m tcp-p tcp--dport 3306-j ACCEPT
重新加载规则
service iptables restart
2.修改mysql库里的host
登录mysql;
use mysql
update user set host='%' where user='root' and host='localhost';
记得一定还得修改密码,因为这时密码已失效,虽然本地还可以原密码登录,可远程改了host后还是没法访问
UPDATE user SET password=password("root") WHERE user='root';
flush privileges;
3.重启mysql,远程就可以访问了
service mysqld restart;
CentOS7开启MySQL远程访问
CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样。按如下方便配置防火墙:
1、关闭防火墙:sudo systemctl stop firewalld.service
2、关闭开机启动:sudo systemctl disable firewalld.service
3、安装iptables防火墙
执行以下命令安装iptables防火墙:sudo yum install iptables-services
?
4、配置iptables防火墙,打开指定端口(CentOS6一样)
5、设置iptables防火墙开机启动:sudo systemctl enable iptables
6、之后的和CentOS6一样
MySQL密码正确却无法本地登录怎么办
MySQL root密码正确,却怎么也无法从本地登录MySQL,提示
1 ERROR 1045(28000): Access denied for user'root'@'localhost'(using password: YES)
这里后来经高人指点才发现mysql库中的user表缺少一个root指向host:localhost的数据项,只有一个root指向host:主机名的数据项,故怎么也无法利用root账户登录MySQL。
总结一点就是root账户缺失了访问localhost主机的账户信息,导致无法本地登录。
那有什么办法恢复root登录呢?
这里记录一下今天遇到的纠结事情:
首先kill掉MySQL进程然后在启动mysql的参数中加入
--skip-grant-tables
会发现这时无密码就可以登录mysql了。
当然我们还必须修复root账户丢失的数据项。
这里有两种解决方案:
第一种是因为root账户初始的时候有3条记录,包含root对应localhost,hostname,127.0.0.1三条账户数据,我们可以update host为其他两项中一项为localhost即可。
第二种是直接insert一条记录,host为localhost即可
总结一下:即使root的host包含了主机名,127.0.0.1那么依然是无法正常登录的,这里必须要有localhost的host才行。
如果上面办法还是无法正常登录我们可尝试另一种办法
在本地用mysql命令直接回车可以进入mysql,但是里面只有test和information_schema数据库,没有mysql等数据库,使用use mysql报如下错:
mysql> use mysql
ERROR 1044(42000): Access denied for user"@'localhost' to database'mysql'
意思是说没有指定user,没有权限访问数据库mysql。
那么用root登录呢,输入正确的密码报如下错:
[root@228827~]# mysql-uroot-p123456
ERROR 1045(28000): Access denied for user'root'@'localhost'(using password: YES)
密码正确的情况下,mysql数据库已经禁止了root用户在本地的登录权限了。
使用root用户通过主机127.0.0.1登录就可以正常进入mysql,127.0.0.1和localhost对mysql数据库来讲是不同的主机,
[root@228827~]# mysql-uroot-p123456-h 127.0.0.1
这让我想起了mysql下的user表。
我们要进mysql看user表,一种方法可以通过上面的命令,如果不行,可以用下面的命令启动数据库,缺省密码进入
代码如下
[root@228827~]#/etc/init.d/mysql stop
[root@228827~]#/usr/local/mysql/bin/mysqld_safe–skip-grant-tables&
[root@228827~]# mysql
Welcome to the MySQL monitor. Commands end with; or g.
Your MySQL connection id is 1
Server version: 5.1.57 Source distribution
Copyright(c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Type'help;' or'h' for help. Type'c' to clear the current input statement.
mysql> use mysql
Database changed
mysql> select user,host,password from user where user='root';
+——+——————-+——————————————-+
| user| host| password|
+——+——————-+——————————————-+
| root|%|*A50E066E106320CF4142|
| root| centos|*A50E066E106320CF4142|
| root| 127.0.0.1|*A50E066E1063608320CF4142|
+——+——————-+——————————————-+
3 rows in set(0.12 sec)
发现user表host字段中没有localhost,但是我的理解是%代表所有的主机都能登录的,为什么localhost不能呢,同样的情况我在5.0.45版的mysql上面做实验就不会发生localhost无法登录,我当前用的是5.1.57版的,难道是版本的问题?
接下来的修改很明显了:
代码如下
mysql> update user set host='localhost' where user='root' and host='%';
mysql> flush privileges;
OK,退出mysql,重启mysql就解决问题了。