MariaDB和MySQL的关系:
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
现在CentOS7默认安装的数据库就是MariaDB而不再是MySQL,防止冲突,所以先检查当前系统是否安装有MySQL,如果有MySQL则需要卸载掉。当然也需要检查是否安装有MariaDB,如果有再检查当前版本是多少。
1、检查是否已经安装了MySQL
rpm -qa | grep -i mysql
或
yum list install mysql*
2、卸载mysql安装包
yum remove mysql mysql-server mysql-libs compat-mysql51
yum remove mysql-community-release
rpm -e --nodeps mysql-community-libs-5.7.22-1.el7.x86_64
rpm -e --nodeps mysql57-community-release-el7-11.noarch
3、删除残留的mysql目录或文件。
#查询mysql安装目录
whereis mysql
find / -name mysql
#删除查询出的目录,查询什么就删除什么,总之删到通过上面两种命令查不出来任何有关mysql的东西。如:
rm -rf /usr/lib64/mysql
rm -rf /usr/share/mysql
rm -rf /usr/bin/mysql
rm -rf /etc/logrotate.d/mysql
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
#删除mysql 配置文件
rm –rf /usr/my.cnf
rm -rf /root/.mysql_sercret
#删除mysql开机自启动服务
chkconfig --list | grep -i mysql
chkconfig --del mysqld // 服务名为你设置时候自己设置的名字
4、卸载MariaDB
使用rpm -qa | grep mariadb搜索 MariaDB 现有的包:如果存在,使用 rpm -e --nodeps mariadb-* 全部删除。(建议使用 rpm -ev 删除时,添加参数 --nodeps 因为会删除依赖包,有可能程序也在使用这些依赖包,从而造成其他程序出错。)
–nodeps就是安装、卸载时不检查依赖关系,比如你这个rpm需要A,但是你没装A,这样你的包就装不上,用了–nodeps你就能装上了。或者下载的时候,你要卸载B,但是B依赖A,要先卸载A才可以卸载B,用了-nodeps你就能卸载了。
–force就是强制安装,比如你装过这个rpm的版本1,如果你想装这个rpm的版本2,就需要用–force强制安装
[root@ecs-639d-0002 ~]# rpm -qa|grep -i mariadb
mariadb-5.5.56-2.el7.x86_64
mariadb-libs-5.5.56-2.el7.x86_64
mariadb-server-5.5.56-2.el7.x86_64
[root@ecs-639d-0002 ~]#
[root@ecs-639d-0002 ~]#
[root@ecs-639d-0002 ~]# rpm -e --nodeps mariadb-5.5.56-2.el7.x86_64
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
[root@ecs-639d-0002 ~]#
[root@ecs-639d-0002 ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
[root@ecs-639d-0002 ~]#
[root@ecs-639d-0002 ~]# rpm -e --nodeps mariadb-server-5.5.56-2.el7.x86_64
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
[root@ecs-639d-0002 ~]#
[root@ecs-639d-0002 ~]# rpm -qa|grep -i mariadb
[root@ecs-639d-0002 ~]#
[root@ecs-639d-0002 ~]# yum remove mariadb
...
Removed:
mariadb.x86_64 1:5.5.56-2.el7
Dependency Removed:
mariadb-server.x86_64 1:5.5.56-2.el7
Complete!
[root@ecs-639d-0002 ~]#
不建议使用yum remove来删除,因为会删除依赖包,有可能程序也在使用这些依赖包,从而造成其他程序出错。
删除遗留目录
[root@ecs-639d-0002 ~]# ls /etc/my.cnf
/etc/my.cnf
[root@ecs-639d-0002 ~]# ll /var/lib/mysql/
total 28700
-rw-rw---- 1 mysql mysql 16384 May 5 10:31 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 May 5 10:31 aria_log_control
-rw-rw---- 1 mysql mysql 18874368 May 5 10:31 ibdata1
-rw-rw---- 1 mysql mysql 5242880 May 5 10:31 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 Oct 6 2017 ib_logfile1
drwx------ 2 mysql mysql 4096 Oct 6 2017 mysql
drwx------ 2 mysql mysql 4096 Oct 6 2017 performance_schema
[root@ecs-639d-0002 ~]#
[root@ecs-639d-0002 ~]#
[root@ecs-639d-0002 ~]# rm -rf /etc/my.cnf
[root@ecs-639d-0002 ~]# rm -rf /var/lib/mysql/
[root@ecs-639d-0002 ~]#
至此,可以开始重新安装MariaDB最新版本了,如下:
第一步:添加 MariaDB yum 仓库
首先在CentOS操作系统中/etc/yum.repos.d/目录下添加 MariaDB 的YUM配置文件MariaDB.repo文件。
这里使用的是国内源,下载速度比较快些。目前MariaDB最新版本是10.5.8
http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
国外的数据源地址是:http://yum.mariadb.org/10.5/centos7-amd64
使用命令行 vim /etc/yum.repos.d/mariadb.repo 添加如下内容:
[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
enabled=1
gpgcheck=1
按 Esc 键,按 : 输入 wq 进行保存退出。
更新缓存
yum clean all
yum makecache
yum repolist
显示可安装的版本
#这个可以看版本号
yum search mariadb --showduplicates
或
yum search mariadb
第二步:安装 MariaDB
通过yum命令轻松安装 MariaDB。
yum -y install MariaDB-server MariaDB-client
MariaDB 安装完毕后,立即启动数据库服务守护进程。
systemctl start mariadb
设置 MariaDB 在操作系统重启后自动启动服务。
systemctl enable mariadb
查看 MariaDB 服务当前状态。
systemctl status mariadb
第三步:对 MariaDB 进行安全配置
通过以下命令进行安全配置,根据实际情况用 Y/n 回复以下问题:设置 MariaDB 的 root 账户密码,删除匿名用户,禁用 root 远程登录,删除测试数据库,重新加载权限表。
mysql_secure_installation
本人全都是选择了Y,然后按回车。
在配置完数据库的安全配置后,可以通过以下命令查看版本,确认 MariaDB已安装成功。
mysql --version
可以通过 MariaDB 命令行登录,然后对数据库进行sql查询操作。
mysql -uroot -p
设置开机启动服务
systemctl enable mariadb
启动服务
systemctl start mariadb
重启服务
systemctl restart mariadb
停止服务
systemctl stop mariadb
查看状态
systemctl status mariadb
第四步:为 MariaDB 配置远程访问权限
在第三步中如果禁用 root 远程登录选择 Y 的话就不能在别的电脑通过navicat等工具连接到数据库,这时就需要给对应的 MariaDB 账户分配权限,允许使用该账户远程连接到MariaDB。可以输入以下命令查看账号信息:
select User, host from mysql.user;
root账户中的host项是localhost表示该账号只能进行本地登录,如果需要远程访问,我们需要修改权限,输入命令:
GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ IDENTIFIED BY ‘my-new-password’ WITH GRANT OPTION;
修改权限。%表示针对所有IP,password表示将用这个密码登录root用户,如果想只让某个IP段的主机连接,可以修改为:
GRANT ALL PRIVILEGES ON . TO ‘root’@‘具体的IP’ IDENTIFIED BY ‘my-new-password’ WITH GRANT OPTION;
最后别忘了:
FLUSH PRIVILEGES;
保存更改后,再看看用户账号信息:
select User, host from mysql.user;
这个时候发现root的host项是%,这说明配置成功了,我们可以用该账号进行远程访问了。
第五步:CentOS 7 开放防火墙端口
在第四步后如果还是不能远程连上数据库的话应该就是3306端口被防火墙拦截了,这时我们就需要关闭防火墙或者开放防火墙端口。
关闭防火墙:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
开放防火墙端口,开启后要重启防火墙:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
第六步:设置数据库字母大小写不敏感,
vim /etc/my.cnf.d/server.cnf
在[mysqld]下加上】
lower_case_table_names=1
MySQL默认字母大小写敏感的。默认值等于0的,即大小写敏感。所以修改成1就行了。
第七步:设置MariaDB数据库默认编码
MariaDB的默认编码是latin1,插入中文会乱码,因此需要将编码改为utf8。
1).登录,使用以下命令查看当前使用的字符集,应该有好几个不是utf8格式。
show variables like "%character%";
show variables like "%collation%";
2).修改的配置文件
vim /etc/my.cnf.d/client.cnf
在[client]字段里加入
default-character-set=utf8
vim /etc/my.cnf.d/server.cnf
在[mysqld]字段里加入
character-set-server=utf8
3).重启 MariaDB 配置生效。
systemctl restart mariadb
第八步:修改端口(此步骤是在你需要修改默认端口的时候使用)
MySQL数据库服务器在Linux和Unix下运行的默认端口是3306 / TCP 。
使用如下命令行查询端口:
show variables like 'port';
为了在Linux中更改默认的MariaDB 或 MySQL数据库端口,请通过执行以下命令打开MariaDB 或 MySQL服务器配置文件进行编辑。
如果是CentOS或Red Hat,则使用如下命令:
vim /etc/my.cnf.d/server.cnf
如果是Debian或Ubuntu,则使用如下命令:
vim /etc/mysql/mariadb.conf.d/50-server.cnf
搜索行统计以[mysqld]开始,并在[mysqld]语句下放置以下端口指令,如以下文件摘录所示。 相应地更换端口变量。
[mysqld]
port = 3308
在添加新的MySQL / MariaDB端口后,保存并关闭配置文件,并安装以下软件包,以便应用所需的SELinux规则以允许数据库绑定到新端口上。
yum install policycoreutils-python
接下来,添加下面的SELinux规则,将MySQL套接字绑定到新端口上,并通过发出以下命令重新启动数据库守护程序以应用更改。 再次,替换MySQL端口变量以匹配您自己的端口号。
##--------------- On CentOS/RHEL ---------------
semanage port -a -t mysqld_port_t -p tcp 12345
systemctl restart mariadb
##--------------- On Debian/Ubuntu ---------------
systemctl restart mysql
为了验证MySQL / MariaDB数据库服务器的端口配置是否已成功应用,请发出netstat或ss命令,并通过grep命令过滤结果,以便轻松识别新的MySQL端口。
ss -tlpn | grep mysql
netstat -tlpn | grep mysql
当然你也看而已通过root用户登录后通过命令行 show variables like ‘port’; 来查看你新修改的端口。
需要注意的是:
一、本地主机上所有与MySQL的连接都是通过MySQL unix域套接字进行的,而不是通过TCP套接字进行的。 但是,如果使用-P标志命令行远程连接到MySQL数据库,则必须明确指定TCP端口号。
二、如果你更改了MariaDB 或 MySQL数据库服务器端口,你需要更新你的分发防火墙规则来允许传入连接到新的TCP端口,以便远程客户端可以成功连接到数据库。
忘记了MariaDB root密码,解决办法如下:
1).先停掉MariaDB
systemctl stop mariadb.service
2).KILL掉系统里的MariaDB进程;
ps -ef | grep mariadb #查询进程PID
kill 进程PID
3).用以下命令启动MariaDB,以不检查权限的方式启动;
mysqld_safe -skip-grant-tables &
或是 修改/etc/my.cnf文件,在[mysqld]下添加 skip-grant-tables , 再启动MariaDB
systemctl restart mariadb.service
然后用空密码方式使用root用户登录MariaDB;
mysql -u root
4).修改root用户的密码;
MariaDB [(none)]> update mysql.user set password=password('新密码') where User='root';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;#或者使用exit;
5). 改完密码需要删除配置文件中的
skip-grant-tables
6).重新启动MariaDB,就可以使用新密码登录
systemctl restart mariadb.service #启动mariaDB