这是头一次用mariadb,听说是centos7自带的,本来本地用的好好地,今天想连接一下远程centos7主机上的mariadb,结果各种出错,痛不欲生,最后实在买办法只能卸载装mysql啦。稍微记录一下
先说一下我的mariadb是5.5的,mysql是5.6的,系统为centos7
以.无法连接远程数据库的原因主要有如下几点
(1).数据库没有启动
(2).被防火墙拦截
(3).数据库不允许用户远程连接
(4).用户名密码不对
1.针对第一种情况
可以试一下本地是否可以登录,能登录说明有启动,也可以用如下命令查看数据库运行状态
#mysql
service mysqld status
#mariadb
service mariadb status
出现绿色字体的active (running)信息表示数据库正在运行
2.被防火墙拦截的话,就老老实实配置一下防火墙吧
#该命令可以查看防火墙是否启动
firewall-cmd --state
我是没有开启防火墙,所以没管这块,后面遇到再整理吧
3.数据库不允许用户远程连接
#在本地进入数据库(通过远程连接工具哈) mysql -uroot -ppasswd
#进入mysql数据库(自带的数据库) use mysql;
#主要是修改user表,先查看一下user表内容 SELECT host,user,password FROM user; +-----------+------+-------------------------------------------+ | host | user | password | +-----------+------+-------------------------------------------+ | localhost | root | *7DA6E613C81FE6163422CD48DF480B66BCEC66 | | 127.0.0.1 | root | *7DA6E613C81FE6163422CD48DF480B66BCEC66 | | ::1 | root | *7DA6E613C81FE6163422CD48DF480B66BCEC66 | +-----------+------+-------------------------------------------+
#你看上面的host都是本地的,下面配置一下通过授权的方式配置远程连接的权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
#我们再来查询一下user表 SELECT host,user,password FROM user; +-----------+------+-------------------------------------------+ | host | user | password | +-----------+------+-------------------------------------------+ | localhost | root | *7DA6E613C81FE6163422CD48DF480B66BCEC66 | | 127.0.0.1 | root | *7DA6E613C81FE6163422CD48DF480B66BCEC66 | | ::1 | root | *7DA6E613C81FE6163422CD48DF480B66BCEC66 | | % | root | *7DA6E613C81FE6163422CD48DF480B66BCEC66 | +-----------+------+-------------------------------------------+
#看吧,是不是比之前多了一行host为%的数据,这表示该用户可以远程连接数据库啦,如果你表中本来就有的话那就不是远程连接配置的问题啦
#网上有很多要修改配置文件,注释掉1.7.0.0.1之类的,可能是版本问题,我的压根找不到这配置文件。
4.用户名密码不正确
主要说一下忘记密码了怎么办吧
#编辑/etc/my.cnf 加入skip-grant-tables #不同版本配置文件位置可能不懂,这个就要自己查查看吧,我说的这个是mysql5.6的 vim /etc/my.cnf #修改如下:
--------------------------------------------------------------------------------------------- # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #skip-grant-tables # Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid ------------------------------------------------------------------------------------
#重启MySQL systemctl restart mysqld #只要你上面有配置成功,那其实现在你的数据库可以在任何地方免密码登录啦,前提你有配置远程登录 #现在试一下可不可以远程登录mysql了呢,但是这样是很不安全的,继续下面配置 #直接用mysql命令登录 mysql #进入'mysql'数据库 use mysql; #修改密码
UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root'; #如果上面的命令报错,可以是一下这个 update mysql.user set authentication_string=password('root') where user='root'; #编辑my.cnf文件删掉skip-grant-tables 这一行,然后重启MySQL systemctl restart mysqld #再试一下可不可远程连接了呢, #最痛不欲生的就是现在还是没办法远程连接,这几步我反复试了很多次,密码修改后一直不生效,最后做到免密码登录后睡了一觉第二天再配置了一变竟然生效啦,
#所以有啥解决不了的问题,睡一觉自然就好了。建议在操作这几步的时候慢一些,可能是配置没能马上生效。
之所以把mariadb卸载重装了mysql,是因为我在执行修改密码的操作时,发现我的mariadb数据库无法停止,也许你可以在修改密码后通过 flush privileges; 命令使修改生效。
我的mariadb的配置一直没生效,你也可以试一下把程序kill掉,我怕以后还出问题,一气之下果断下载了,关于卸载的步骤,可以参考https://blog.csdn.net/sunny05296/article/details/56015884和https://blog.csdn.net/xizaihui/article/details/53041603
我是这样卸载的
# rpm -qa | grep mariadb mariadb-libs-5.5.50-1.el7_2.x86_64 mariadb-5.5.50-1.el7_2.x86_64 mariadb-server-5.5.50-1.el7_2.x86_64 # rpm -e --nodeps mariadb-libs-5.5.50-1.el7_2.x86_64 # rpm -e --nodeps mariadb-5.5.50-1.el7_2.x86_64 # rpm -e --nodeps mariadb-server-5.5.50-1.el7_2.x86_64 #删除数据库文件: rm -rf /var/lib/mysql/*
另外卸载之前如果有数据的话要备份一下,可以参考https://www.cnblogs.com/jwlfpzj/articles/7998395.html
主要记录一下导出数据到文件的和从文件导入数据库的命令
#导出,可以不登陆数据库服务 mysqldump -u dbuser -p dbname > dbname.sql #导入,需要登录数据库服务,并选择要导入到的数据库 source /home/abc/abc.sql;
最后再说一个安装mysql5.6的参考文章:https://blog.csdn.net/xizaihui/article/details/52962057
安装完数据库后要设置一下字符编码,不然后面创建的数据库会不支持中文或者乱码
#编辑 /etc/my.cnf vim /etc/my.cnf #在[mysqld]下添加如下配置 character-set-server=utf8 #如果字符集还不行,再增加如下配置 [client] default-character-set=utf8 [mysql] default-character-set=utf8 #在修改字符编码前的数据库编码还是不会变,需要重新创建数据库,再把数据导入