这是头一次用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掉,我怕以后还出问题,一气之下果断下载了,关于卸载的步骤,可以参考和
我是这样卸载的
# 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/*
另外卸载之前如果有数据的话要备份一下,可以参考
主要记录一下导出数据到文件的和从文件导入数据库的命令
#导出,可以不登陆数据库服务
mysqldump -u dbuser -p dbname > dbname.sql
#导入,需要登录数据库服务,并选择要导入到的数据库
source /home/abc/abc.sql;
安装完数据库后要设置一下字符编码,不然后面创建的数据库会不支持中文或者乱码
#编辑 /etc/my.cnf
vim /etc/my.cnf
#在[mysqld]下添加如下配置
character-set-server=utf8
#如果字符集还不行,再增加如下配置
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
#在修改字符编码前的数据库编码还是不会变,需要重新创建数据库,再把数据导入