Linux 下 MySQL(Mariadb) 安装与使用

由于工作需要,经常统计各类信息,于是有了开发部署一套企业信息管理系统的需求。考虑到只是本部门的需要,且有人力资源支持开发,所以由我们自己开发。硬件使用员工淘汰的旧硬件,软件计划采用 LAMP 组合,其他需要开发的部分,也由我们自己完成。简单说来,不花一分钱,就要完成这项工作。

操作系统采用 CentOS-7.4,MySQL 选用配套的 mariadb-5.5.56。我自己其实也是个新手,没有干过这项工作,所以过年期间也加班加点,争取年后能在单位的机器上立即部署使用。现在,记下这个过程,以备不时之需。

CentOS 7 的安装不再详述,选择最小安装即可,剩下的软件均可以在操作系统安装后再安装。

MySQL 之所以选择 mariadb 而不是原生 MySQL 是因为在我们的业务范围内,mariadb 完全能满足需求,且是CentOS 7 自带的,应该解决了不少兼容性问题。从百度百科我们知道,MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。基于以上原因,我们选择了 mariadb。

  1. 安装 mariadb

      # yum install -y mariadb mariadb-server
      # systemctl list-unit-files | grep mariadb
      mariadb.service                             disabled
      # systemctl enable mariadb.service
      # systemctl start  mariadb.service
    

    必须拥有 root 权限才能安装,且安装后要启用且启动 mariadb.service。

  2. 更该密码

      $ mysql
      MariaDB [(none)]> set password = password('coder');         
      ERROR 1133 (42000): Can't find any matching row in the user table  
      MariaDB [(none)]> flush privileges;  
      ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD  
      privilege(s) for this operation
      #  mysql
      MariaDB [(none)]> flush privileges;     
      Query OK, 0 rows affected (0.00 sec)    
      MariaDB [(none)]> set password = password('coder');   
      Query OK, 0 rows affected (0.00 sec)
      $ mysql
      MariaDB [(none)]> set password = password('coder');         
      ERROR 1133 (42000): Can't find any matching row in the user table  
      $ mysql -u root -p
      Enter password:
      MariaDB [(none)]> 
    

    安装完 mariadb 后,退出 root 权限,此时启动 mysql,能正常启动,但是无法设置密码。查 mysql 错 误代码说明里,查到 mysql 错误 1133 是数据库用户名不存在 ;查网上解决办法,好多提示执行 FLUSH PRIVILEGES; 命令,但仍然无法成功执行。但从 root 用户就可以正确执行 FLUSH PRIVILEGES; 和 set
    password 命令,后来查系统数据库的表,用户权限表中,只有 root 用户,没有 Linux 系统中的普通用 户,所以普通用户连接数据库后,也无法执行有影响的命令。

    如果日常应用中,需要从 Linux 系统的普通用户连接数据库,则需要使用 mysql -u root -p 命令并输入设 置的数据库 root 用户密码,不是 Linux 系统 root 用户密码,而且,必须使用 -p 选项,否则会提示:

    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

    此时,仍然无法进入数据库。

    扫描二维码关注公众号,回复: 82761 查看本文章
  3. 数据库安全设置
    MariaDB 推荐所有生产环境的 MariaDB 服务器都运行此脚本。

      # mysql_secure_installation
    

    (1). 设置密码,由于前面已经设置过,此处不需要更改;
    (2). 删除数据库的匿名账户,正是因为有此匿名账户,我们可以以空身份登陆(仅输入 mysql ),但无 法完成其他大部分操作。此处应该删除该匿名账户;
    (3). 禁止 root 用户从网络登陆, root 用户仅被允许从 'localhost' 登陆,此处应该选择 Yes ;
    (4). 删除 test 数据库,该数据库仅用于测试,应该在转入生产环境前删除,此处选择删除;
    (5). 重新载入权限表,以使所做的更改生效,此处选择 yes;

  4. 数据库字符集设置
    由于数据库中需要输入输出中文信息,所以需要做支持中文设置。

    MariaDB [(none)]> show variables like 'char%';
    

    默认情况下,该命令输出的各种字符集多数是 latin1,不支持中文,此时如果创建数据库、表,并写入中 文信息。插入操作能成功执行,但是查询时,涉及中文信息的会以“??? “的方式显示,完全无法阅读。

    更改办法:

    In file /etc/my.cnf.d/client.cnf, after the '[client]' zone, add the next line as follows:
    [client]
    default-character-set=utf8
    in file /etc/my.cnf.d/server.cnf, after the '[server]' zone, add the next line as follows:
    [server]
    character-set-server=utf8
    Restart the mariadb.service
    systemctl restart mariadb.service

    做完这些准备工作,就可以在 mariadb 数据库中使用中文了。如果采用远程连接,必须保证远程连接工 具使用的编码和数据库一致。

  5. 创建数据库表

      MariaDB [(none)]>  create database worker_info;  
      MariaDB [(none)]>  use worker_info;  
      MariaDB [(none)]>  create table wid_name ( wid  int unsigned not null,  name  varchar(10) not null, 
     primary key (wid) );  
    
  6. 执行 insert 命令插入数据

      MariaDB [(worker_info)]>  insert into wid_name (wid, name ) values ( 2018101001, '今天' );
    
    

数据库的安装基本到此结束。

猜你喜欢

转载自my.oschina.net/u/260165/blog/1622181