CentOS7.x使用yum安装MySQL数据库

  • CentOS7.x将默认数据库MySQL替换成了Mariadb,下面使用yum进行安装MySQL
  • 系统为:CentOS7.6.1810
  • 最终安装MySQL版本:5.7.29

一、卸载Mariadb

rpm -qa | grep mariadb | xargs rpm -e --nodeps

二、使用MySQL的官方repo源,安装MySQL

cd /usr/local/src
# 下载MySQL的官方repo源
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
# 安装Yum Repository
rpm -ivh mysql57-community-release-el7-10.noarch.rpm
# 查看可被安装的包
yum repolist enabled | grep mysql
# 安装MySQL服务器
yum -y install mysql-community-server #使用该条命令!
#yum -y install mysql-server mysql-devel 

上面源无法下载时,也可以使用https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpmrepo源。

三、设置MySQL数据库密码

启动MySQL

systemctl start mysqld

查看MySQL状态

systemctl status mysqld

此时MySQL已经正常运行,需要找出root的密码

grep 'temporary password' /var/log/mysqld.log

如下图,其中初始密码为:hC0AP<6gwX%f,每个人安装好MySQL并且启动后的密码均不唯一,以你查看到的为准!(另外,必须以mysql -u root -p回车后输入此密码才行,如果嫌密码不好输入,直接复制粘贴过去也行。)

查找MySQL登陆密码
  1. 为防止新密码设置过于简单报错,可登陆MySQL之后第一时间进行以下操作
  • mysql> set global validate_password_policy=0;
  • mysql> set global validate_password_length=1;
  1. 如果使用复杂密码且符合规范,使用密码生成器生成,随机密码生成器,特殊符号中添加:!,@,#,$,%,^,&,*,密码长度为16。
# 登陆MySQL
mysql -u root -p(回车后输入上面查到的密码)
# 输入初始密码后,此时不能做任何事情,因为MySQL默认必须修改密码才能正常使用
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

修改完成后,退出重新登陆MySQL时,即可使用新密码!

四、设置字符集为utf8 && 设置时区

1、使用新的密码登陆MySQL查看字符集与时区
# 查看字符集
mysql> show variables like 'char%';
# 查看时区
mysql> show variables like '%time_zone%';
CentOS7.x使用yum安装MySQL数据库_第1张图片
装完MySQL之后有两处字符集不为utf8
2、修改字符集、修改时区
vim /etc/my.cnf

在该文件最后一行添加character-set-server=utf8,如下

CentOS7.x使用yum安装MySQL数据库_第2张图片
修改字符集为utf8

在该文件中的 [mysqld] 下面添加时区

# 东八区时区,北京时区
default-time-zone = '+8:00'
3、根据需要修改数据库表名大小写敏感
# 不区分大小写
lower_case_table_names=1

lower_case_table_names: 此参数不可以动态修改,必须重启数据库
lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
lower_case_table_names=1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的

# 查看当前数据库大小写是否区分
show variables like 'lower_case_table_names';
4、/etc/my.cnf配置文件示例
# 字符集设置
character_set_server=utf8
# 东八区时区,北京时区
default-time-zone = '+8:00'

# 默认开启事件
event_scheduler=ON

#自增长起始值
auto-increment-offset = 1
#自增长步长
auto-increment-increment = 2
#临时表大小
tmp_table_size = 64M
# 不区分大小写
lower_case_table_names=1

## 以下为配置主从设置
#数据库唯一ID,主从的标识号绝对不能重复。
server-id=1
#开启bin-log,并指定文件目录和文件名前缀
#log-bin=mysql-bin
#需要同步liting数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)。
binlog-do-db=db1
binlog-do-db=db2
#不同步mysql系统数据库。如果是多个不同步库,就以此格式另写几行;也可以在一行,中间逗号隔开。
binlog-ignore-db=mysql
#确保binlog日志写入后与硬盘同步
sync_binlog = 1
#跳过现有的采用checksum的事件,mysql5.6.5以后的版本中binlog_checksum=crc32,而低版本都是binlog_checksum=none
binlog_checksum = none
#bin-log日志文件格式,设置为MIXED可以防止主键重复。
binlog_format = mixed
#二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days    = 10
#如果当前的日志大小达到max_binlog_size,还会自动创建新的二进制日志
max_binlog_size     = 100M
#表示 slave 将复制事件写进自己的二进制日志
log_slave_updates   = 1
#跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。
slave-skip-errors = all

5、重启数据库
systemctl restart mysqld

字符集修改完成后,重启MySQL,登陆MySQL查看下字符集,如下


CentOS7.x使用yum安装MySQL数据库_第3张图片
修改完成后

五、移除MySQL的repo源

为了防止每次进行yum操作时其自动更新,移除MySQL的repo。

yum -y remove mysql57-community-release-el7-10.noarch

六、允许远程连接MySQL

查看当前用户权限:show grants;

1、更新root账号信息,允许任何主机以root账号登陆(推荐)
mysql> use mysql;
mysql> select host,user from user;
mysql> update user set host='%' where user='root';
2、任何主机以dev账号登陆
mysql> GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%' IDENTIFIED BY 'new password' WITH GRANT OPTION;
3、指定主机以root账号登陆
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@’192.168.1.120’ IDENTIFIED BY 'new password' WITH GRANT OPTION;
4、新增用户并授权
# 创建用户
mysql> create user test@'%' identified by '123456';
# 授权
mysql> grant all privileges on test.* to test@'%';
5、进行以上任何操作,均需刷新权限
mysql> flush privileges;

七、MySQL自启

# 查看MySQL是否自启
systemctl is-enabled mysqld

如下如,为enabled时,MySQL为自启(安装MySQL之后,默认为自启,因此此步骤中不需要重复开启)

查看MySQL是否自启

八、防火墙放行3306端口

如果你的防火墙已经关闭,可忽略此操作。

# 永久开放3306端口
firewall-cmd --permanent --zone=public --add-port=3306/tcp
# 重启防火墙
systemctl restart firewalld
# 检测设定是否生效
iptables -L -n | grep 3306

九、MySQL5.25使用过程中出现的问题以及解决办法

9-1、在MySQL5.7.x的版本中,可能会出现[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c,问题。[1]

问题原因:可能使用了低版本Navicat刷脚本时遇到的问题
问题解决:

1、在my.cnf[mysqld]下添加sql_mode

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

如下图


添加sql_mode
2、修改完配置文件后,重启MySQL

systemctl restart mysqld

3、使用SQLyog刷脚本

文章参考

  • centos7下安装mysql(完整配置)
  • 修改MySQL的时区,涉及参数time_zone
  • 一次JDBC与MySQL因“CST”时区协商误解导致时间差了14或13小时的排错经历
  • CentOS7 yum 安装与配置MySQL5.7

字符集设置

  • 让MySql支持Emoji表情
  • 修改mysql数据库utf8编码为utf8mb4支持emoji表情存储

用户新建

  • mysql新建用户,修改权限

问题解决参考


  1. [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c ↩

你可能感兴趣的:(CentOS7.x使用yum安装MySQL数据库)