由于工作需要,经常统计各类信息,于是有了开发部署一套企业信息管理系统的需求。考虑到只是本部门的需要,且有人力资源支持开发,所以由我们自己开发。硬件使用员工淘汰的旧硬件,软件计划采用 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。
安装 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。
更该密码
$ 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)
此时,仍然无法进入数据库。
数据库安全设置
MariaDB 推荐所有生产环境的 MariaDB 服务器都运行此脚本。
# mysql_secure_installation
(1). 设置密码,由于前面已经设置过,此处不需要更改;
(2). 删除数据库的匿名账户,正是因为有此匿名账户,我们可以以空身份登陆(仅输入 mysql ),但无
法完成其他大部分操作。此处应该删除该匿名账户;
(3). 禁止 root 用户从网络登陆, root 用户仅被允许从 'localhost' 登陆,此处应该选择 Yes ;
(4). 删除 test 数据库,该数据库仅用于测试,应该在转入生产环境前删除,此处选择删除;
(5). 重新载入权限表,以使所做的更改生效,此处选择 yes;
数据库字符集设置
由于数据库中需要输入输出中文信息,所以需要做支持中文设置。
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 数据库中使用中文了。如果采用远程连接,必须保证远程连接工
具使用的编码和数据库一致。
创建数据库表
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) );
执行 insert 命令插入数据
MariaDB [(worker_info)]> insert into wid_name (wid, name ) values ( 2018101001, '今天' );
数据库的安装基本到此结束。