zoukankan      html  css  js  c++  java
  • CentOS 安装 MySQL

    MySQL 安装

    通过 Yum Repository 方式安装

    注意点:CentOS7 默认安装了 mariadb 数据库,先移除:yum remove mariadb-libs

    添加 MySQL Yum源

    简要概况,它是通过安装 mysql80-community-release-el7-2.noarch.rpm 包来实现配置 Yum 源的,这个 rpm 包并非 MySQL 的真正安装包。

    你可以通过下载两个途径下载这个 mysql80-community-release-el7-2.noarch.rpm 包:

    1. wget https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm下载下来;
    2. MySQL Yum Repository page 手动下载,再上传到服务器上;

    下载下来之后,执行:

    yum localinstall mysql80-community-release-el7-2.noarch.rpm
    

    可以通过以下命令检查MySQL Yum源是否已成功添加:

    yum repolist enabled | grep "mysql.*-community.*"
    

    上面步骤执行完之后,会在 /etc/yum.repos.d/ 目录下生成 MySQL 相关的 Yum 源配置,需要对这个配置文件进行一些设置,启用你想安装的版本对应的源。

    选择一个 MySQL 发行版

    1.查看一下 Yum 源的配置,可以看到那些源是 enabledisable

    yum repolist all | grep mysql
    

    2.选择你需要安装的版本对应的源

    yum-config-manager --disable mysql80-community
    yum-config-manager --enable mysql57-community
    

    由于生产环境大部分还是采用 MySQL5.7 版本,因此,我这里启用了5.7版本的源。除了上述方式,你还可以采用编辑/etc/yum.repos.d/mysql-community.repo文件,enable相应的源(enbaled=1 表示启动)。

    3.验证源配置启动成功

    yum repolist enabled | grep mysql
    yum list|grep mysql-community-server
    

    安装 MySQL

    yum install mysql-community-server
    yum install mysql-community-server-5.7.25-1.el7 # 建议指定具体的版本,保证一致性
    

    这将安装 MySQL Server( MySQL -community-server )的包,以及运行服务器所需组件的包,包括客户机(MySQL -community-client)的包、客户机和服务器的通用错误消息和字符集(MySQL -community-common)以及共享的客户机库(MySQL -community-libs)的包。

    MySQL 配置

    MySQL 默认的配置文件在 /etc/my.cnf

    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/5.7/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
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    

    修改默认的数据保存目录以及数据库编码

    数据库保存的数据和日志是相当宝贵的,数据保存位置默认是这里:datadir=/var/lib/mysql,现在,我们需要改变默认的存储位置。

    1.创建相关目录

    mkdir -p /data/mysql/data
    mkdir -p /data/mysql/log
    

    2.修改属组

    cd /data
    chown -R mysql:mysql mysql
    

    3.移动数据
    这个步骤是针对已经有数据生成时的情况,如果是刚刚安装 MySQL 数据库,那么这一步可以跳过。

    注意:为了确保数据的完整性,先 systemctl stop mysqld 停止 MySQL,然后再保存数据。

    • 暂停服务:systemctl stop mysqld
    • 备份数据: cp -R /var/lib/mysql /var/lib/mysql_bak
    • 移动数据:rsync -av /var/lib/mysql/ /data/mysql/data/,这个会将原 mysql 下的所有数据,保存到 /data/mysql/data 文件夹下,

    使用-a标志保留的权限和其他目录属性,而-v提供详细输出,以便能够按照进度。

    修改配置文件

    vi /etc/my.cnf 编辑配置文件,数据位置和套接字都指向新的目录:

    # 修改位置
    datadir=/data/mysql/data
    socket=/data/mysql/mysql.sock
    
    # 新增配置
    [client]
    socket=/data/mysql/mysql.sock
    

    配置预览:

    [mysqld]
    datadir=/data/mysql/data
    socket=/data/mysql/mysql.sock
    
    #普通项目的编码方式可以设置成 utf8
    #这里设置成utf8mb4,是因为我的项目需要存储 emoji 表情,
    #这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。
    #在MySQL 5.6 以上版本中,可以设置编码为utf8mb4,这个字符集是utf8的超集。
    #注意KEY不要写错,网上很多文章都是写default-character-set是错的
    character-set-server=utf8mb4 
    
    #版本5.6.19以后必须设置这一句才能使[client]中设置的编码有效
    character-set-client-handshake = FALSE
    collation-server=utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    
    #表名是否区分大小写:1表示不区分大小写,2表示区分
    lower_case_table_names=1
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    log-error=/data/mysql/log/mysqld.log
    #skip-grant-tables # 如果去除注释,可以实现免密登录,不建议开启免密
    
    [mysql] 
    default-character-set=utf8mb4
    
    [client]
    socket=/data/mysql/mysql.sock
    
    #普通项目的编码方式可以设置成 utf8
    #这里设置成utf8mb4,是因为我的项目需要存储 emoji 表情,
    #这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。
    #在MySQL 5.6 以上版本中,可以设置编码为utf8mb4,这个字符集是utf8的超集。
    default-character-set=utf8mb4
    

    以上配置之外,还进行了编码的配置,支持 UTF-8

    启动 systemctl start mysqld,这样子,之前的账户密码等数据才会保留!!!

    4.验证
    启动 MySQL

    systemctl start mysqld # 启动
    systemctl status mysqld # 状态查询
    systemctl enable mysqld # 开机自启
    systemctl daemon-reload # 重载所有修改过的配置文件
    

    默认初始密码:

    grep 'temporary password' /var/log/mysqld.log # 未未修改日志路径
    grep 'temporary password' /data/mysql/log/mysqld.log # 修改日志路径
    

    验证:

    mysql -u root -p
    select @@datadir; # 执行这个命令,需要先用 ALTER USER 初始化命令
    SHOW VARIABLES LIKE 'character%'; # 查看编码,character_set_system 一直都会是 utf8,不能被更改
    

    修改 root 密码

    注意:MySQL 5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于 8 位

    设置管理员密码,以下几种方式都一样:

    SET PASSWORD = PASSWORD("Root_123456");
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_123456'; 
    set password for 'root'@'localhost'=password('Root_123456');
    

    以后可以通过如下命令修改:

    use mysql;
    update user set password=PASSWORD('MyNewPass5!') where user='root';
    

    还需要刷新使其密码生效:

    alter user 'root'@'localhost' password expire never;
    flush privileges;
    

    如果你是安装的8.0版本,则需要这么改:

    ALTER USER 'root'@'localhost' identified by 'Root_123456';
    

    新建用户

    create user 'cicd'@'%' identified by 'Root_123456'; # 因为要可以从任何 ip 登录,所以 host 设置的是%号
    

    赋予权限:

    grant all privileges on *.* to 'cicd'@'%' with grant option; # MySQL 8.0 语法 *.* 表示任何数据库的任何表
    grant all privileges on *.* to 'cicd'@'%' identified by '123456' with grant option; # MySQL 5.7 语法
    flush privileges;  # 这时候登录时,就可以看到所有数据库了
    
    grant  select,insert on *.* to 'imooc'@'%' with grant option; # 只赋予部分权限
    revoke all privileges on *.* from imooc; # 收回所有权限
    

    远程连接 MySQL

    需要关闭防火墙:

    systemctl stop firewalld # 关闭防火墙
    

    默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须添加一个允许远程连接的帐户。或者修改 root 为允许远程连接(不推荐)。

    mysql -u root -p 进入mysql 终端:

    use mysql;
    select * from user G; # G 格式化显示 host 和 user 两个字段
    select Host,User from user G; # Host表示允许哪些主机访问
    update user set Host='%' where Host='localhost' and User='root';
    flush privileges; # 刷新权限 或者 systemctl restart mysqld
    

    MySQL 常用命令

    show databases;
    use tables;
    show variables like 'character%'; # 查询编码
    

    MySQL 命令补全行工具

    pip install -U mycli
    mycli -u root [-h localhost]
    
    mycli local_database
    mycli -h localhost -u root app_db
    mycli mysql://amjith@localhost:3306/django_poll
    

    FAQ

    如何查看 MySQL 版本?

    mysql -V
    

    忘记 Root 密码?

    sudo vim /etc/my.cnf # 打开配置文件,最后增加下面一行,实现MySQL免密登录
    skip-grant-tables # 跳出授权表的验证
    systemctl restart mysqld
    use mysql;
    show tables;
    update user set authentication_string = password('root_123456') where user = 'root'; # 旧方法
    flush privileges;
    alter user 'root'@'%' identified by 'Root_1234'; # 将 skip-grant-tables 去掉
    

    参考

    安装

    配置

    修改目录

  • 相关阅读:
    批量改文件名小工具
    整理一下在 npmjs.com 上面发布资源包踩过的坑
    告别Vuex,发挥compositionAPI的优势,打造Vue3专用的轻量级状态
    vue3 专用 indexedDB 封装库,基于Promise告别回调地狱
    C++ 学习笔记(三):介绍几个在线编译器【转】
    【Linux】一篇文章彻底搞定信号!【转】
    缓存淘汰算法系列(一)【转】
    缓存淘汰算法 LRU 和 LFU【转】
    NAND Flash标准之ONFI VS TOGGLE【转】
    NAND FLASH学习笔记之nand flash基础(一)【转】
  • 原文地址:https://www.cnblogs.com/michael-xiang/p/10467414.html
Copyright © 2011-2022 走看看