Linux离线安装MySQL详解

本教程为测试环境,出于安全性考虑,在生产运行环境下应做到:

  • 不应当给root用户开启远程登录权限。

  • 给用户赋权时,应当根据用户的需求,做到权限细分,如限定登录的ip地址,在grant命令中只开放select、update的权限等。

  • 不设置弱密码

一、离线安装MySQL

以CentOS为例

  1. 检查是否已安装mysql

    rpm -qa | grep mysql
    
  2. 卸载已安装的mysql

    # --nodeps 跳过依赖检查
    rpm -ev --nodeps mysql80-community-release-el7-7.noarch
    rpm -ev --nodeps mysql-community-client-plugins-8.0.22-1.ky3.kb1.x86_64
    
  3. 删除mysql相关文件

    # 删除库文件
    find / -name "mysql*" | xargs rm -rf 
    # 删除配置文件
    find / -name "my.cnf*" | xargs rm -rf 
    
  4. 下载rpm包:

    • 方法一:官网直接下载(https://downloads.mysql.com/archives/community/)

      # 注:版本需对应,如下述包都是8.0.32
      mysql-community-client-plugins-8.0.32-1.el7.x86_64.rpm 
      mysql-community-common-8.0.32-1.el7.x86_64.rpm
      mysql-community-libs-8.0.32-1.el7.x86_64.rpm
      mysql-community-client-8.0.32-1.el7.x86_64.rpm
      mysql-community-icu-data-files-8.0.32-1.el7.x86_64.rpm
      mysql-community-server-8.0.32-1.el7.x86_64.rpm
      
    • 方法二:建立本地仓库

      以mariadb为例,推荐仓库自带的mariadb5

      mkdir rpms
      cd rpms
      yum install --downloadonly --downloaddir=. mariadb-server
      
  5. 安装

    将下载好的rpm包拷至服务器,可按“4.方法一”顺序安装,或

    rpm -iUvh --force --nodeps *.rpm
    

二、管理MySQL服务

  1. 启动mysql服务

    systemctl start mysqld
    
  2. 检查mysql服务运行状态

    systemctl status mysqld
    
  3. 停止mysql服务

    systemctl stop mysqld
    
  4. 重启mysql服务

    systemctl restart mysqld
    
  5. 关闭开机自启动

    systemctl disable mysqld
    
  6. 开启开机自启动

    systemctl enable mysqld
    

三、修改root初始密码

方法1

  1. 获取初始密码

    grep 'temporary password' /var/log/mysqld.log
    
  2. 登录mysql

    # -h ip地址
    mysql -u root -p
    

    输入上述命令获取的密码

  3. 修改密码

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'PASSWD';
    

方法2

  1. 登录mysql
    mysql -uroot
    
  2. 选择mysql数据库
    use mysql;
    
  3. 修改密码
    UPDATE mysql.user SET password = PASSWORD('newpassward') WHERE user = 'root';
    # 或
    SET password=PASSWORD('newpassward');
    
  4. 刷新权限
    FLUSH PRIVILEGES;
    

方法3

  • 使用客户端mysqladmin
    mysqladmin -u root password 'newpassword'
    # 如果已经设置过密码
    mysqladmin -u root -p 'oldpassword' password 'newpassword'
    

四、设置弱密码

  1. 查看mysql密码策略

    SHOW VARIABLES LIKE 'validate_password%';
    
  2. 设置密码安全等级为LOW

    set global validate_password.policy=LOW;
    
  3. 设置密码长度为6

    set global validate_password.length=6;
    
  4. 修改密码

    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    

五、添加新用户

方法1

Create语句

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

其中:

  • username:用户名;
  • password:用户登录密码;
  • host:指定在哪个主机上可以登录,本机可用localhost,%通配所有远程主机;

方法2

在 mysql 数据库中的 user 表插入记录

INSERT INTO user 
          (host, user, password, 
           select_priv, insert_priv, update_priv) 
           VALUES ('%', 'username', 
           PASSWORD('password'), 'Y', 'Y', 'Y');

六、授权

赋予对表记录的增删改查、建表、删表权限

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ON *.*
    TO 'username'@'%'
    IDENTIFIED BY 'password';

赋予全部权限

GRANT ALL PRIVILEGES 
    ON  *.*
    TO  'username'@'%'
    IDENTIFIED BY 'password';

刷新权限

FLUSH PRIVILEGES;

七、 设置字符集

查看字符集

  1. 查看数据库字符集

    show variables like '%character%';
    
  2. 查看MYSQL所支持的字符集

    show charset;
    

修改字符集

解决乱码问题

  1. 修改库的字符集

    # 建库时指定字符集
    create database db_name default character set=utf8;
    # 修改库的字符集
    alter database shiyan default character set gbk;
    
  2. 修改表的字符集

    # 建表时指定字符集
    create table tbl_name(id int(4), name varchar(128)) default character set = 'gbk';
    # 修改表的字符集
    alter table test1 convert to character set utf8;
    
  3. 修改字段的字符集

    alter table tbl_name modify name char(10) character set gbk;
    

详见:

MySQL查看和修改字符集的方法 - 明王不动心 - 博客园 (cnblogs.com)

八、设置大小写不敏感

解决找不到表问题

  1. 查看变量

    show variables like '%case%';
    
  2. 使用root用户修改/etc/mysql/my.cnf,mariadb为/etc/mysql/my.cnf.d/server.cnf

    # 在[mysql]下增加
    lower_case_table_name=1
    

九、设置mysql允许远程登录

  1. 改表法

    use mysql;
    select host, user from user;
    update user set host = '%' where user = 'root';
    
  2. 授权法(未验证)

    use mysql;
    select  User,authentication_string,Host from user;
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  3. 重启服务生效

    systemctl restart mysqld.service
    

十、开启关闭服务器防火墙

  1. 查看服务器防火墙是否开启

    # 如果显示running,则为开启状态
    firewall-cmd --state
    
  2. 关闭防火墙

    systemctl stop firewalld.service
    
  3. 开启防火墙

    systemctl start firewalld.service
    
  4. 关闭开机自启动

    systemctl disable firewalld.service
    
  5. 开启开机自启动

    systemctl enable firewalld.service
    
  6. 打开端口

    # 以端口5432为例
    firewall-cmd --zone=public --add-port=5432/tcp --permanent 
    
  7. 查看端口占用

    # 以端口8088为例
    sudo lsof -i:8088
    
posted @ 2023-04-23 16:49  某科学的撒把豆子  阅读(262)  评论(0)    收藏  举报