编写应用程序不方便
数据冗余不可避免
应用程序依赖性
不支持对文件的并发访问
数据间联系弱
难以按用户视图表示数据
无安全控制功能
相互关联的数据的集合
较少的数据冗余
程序与数据相互独立
保证数据的安全、可靠
最大限度地保证数据的正确性
数据可以并发使用并能同时保证一致性
数据库是数据的汇集,它以一定的组织形式存于存储介质上
DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
DBA(团队):负责数据库的规划、设计、协调、维护和管理等工作
应用程序指以数据库为基础的应用程序
数据定义
数据处理
数据安全
数据备份
单机架构 :比如access,一些财务数据库
大型主机/终端架构:一个大型主机带多套键鼠显示屏设备(终端)
主从式架构(C/S):主流的客户端服务端架构
分布式架构 :集群
关系 :关系就是二维表,其中:表中的行、列次序并不重要
行row(record):表中的每一行,又称为一条记录
列column(field):表中的每一列,称为属性或字段
主键Primary key:用于惟一确定一个记录的字段,一张表只能一个主键,且主键(或者复合主键)的字段不能重复
域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值
数据库规范化,又称数据库或资料库的正规化、标准化,是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。关系模型的发明者埃德加·科德最早提出这一概念,并于1970年代初定义了第一范式、第二
范式和第三范式的概念
RDMBS设计范式基础概念:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般数据库只需满足第三范式(3NF)即可
附加知识点: /etc/gconf/gconf.xml.gefaults中大部分都是xml文件(图形界面的xml文件)
其中有个%gconf-tree.xml文件,里面的文件代码格式就是xml格式。
在Cenots6中这个文件中的disable_user_list一行,这里的它下面的type 中的value改为true,则centos6登陆的时候只能手动输入用户名而不会显示用户名的列表可以鼠标点选了。
插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是MYSQL默认引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
单进程,多线程
诸多扩展和新特性
提供了较多测试组件
开源
mysql使用模式:
服务器监听的两种socket地址:
ip socket: 监听在tcp的3306端口,支持远程通信
unix sock: 监听在sock文件上,仅支持本机通信
如:/var/lib/mysql/mysql.sock)
说明:host为localhost,127.0.0.1时自动使用unix sock
Administration program for the mysqld daemon.
Usage: mysqladmin [OPTIONS] command command....
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
可看到配置文件顺序,这些文件不仅包括服务器端还包括客户端
mysqladmin password centos :修改密码为centos(如果没有旧密码)
mysqladmin -uroot -pOLDPSW passwpord centos :修改旧密码为centos
mysqladmin -uroot -pPSW ping|status|version :查看各种状态
mysqladmin -uroot -pPSW shutdown :可关闭数据库
下面为一些操作示例:
============================================刚装之后查看版本和已有用户,注意加分号:
MariaDB [(none)]> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.000 sec)
MariaDB [(none)]> select version();
+-----------------+
| version() |
+-----------------+
| 10.3.14-MariaDB |
+-----------------+
1 row in set (0.000 sec)
MariaDB [(none)]>
=====================================================刚装之后登陆查看状态
MariaDB [(none)]> status
--------------
mysql Ver 15.1 Distrib 10.3.14-MariaDB, for Linux (x86_64) using readline 5.1
Connection id: 11
Current database: :当前正在使用的数据库,可见当前为空
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 10.3.14-MariaDB MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock :表示通过本机的socket套接字连接的本机的mysql,因为不走网络,因此不需要端口号。这个套接字文件就显示在这里。
Uptime: 26 min 29 sec
:线程
Threads: 7 Questions: 10 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 11 Queries per second avg: 0.006
--------------
========================================================刚装之后查看数据库,注意加分号:
MariaDB [(none)]> show databases ;
+--------------------+
| Database |
+--------------------+
| information_schema | : 此数据库是在内存中的,动态数据库,其他3个默认自带数据库都在/var/lib/mysql下
| mysql | :
| performance_schema | :
| test | :
+--------------------+
4 rows in set (0.002 sec)
MariaDB [(none)]> Ctrl-C -- exit!
===============================================切换数据库:
MariaDB [(none)]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]>
======================================================/var/lib/mysql/mysql 中文件:
21:49[root@centos7 /var/lib/mysql/mysql]# ls
columns_priv.frm general_log.CSM help_topic.MYD proc.frm slow_log.CSM time_zone_name.frm
columns_priv.MYD general_log.CSV help_topic.MYI proc.MYD slow_log.CSV time_zone_name.MYD
columns_priv.MYI general_log.frm host.frm proc.MYI slow_log.frm time_zone_name.MYI
column_stats.frm gtid_slave_pos.frm host.MYD procs_priv.frm tables_priv.frm time_zone_transition.frm
column_stats.MYD gtid_slave_pos.ibd host.MYI procs_priv.MYD tables_priv.MYD time_zone_transition.MYD
column_stats.MYI help_category.frm index_stats.frm procs_priv.MYI tables_priv.MYI time_zone_transition.MYI
db.frm help_category.MYD index_stats.MYD proxies_priv.frm table_stats.frm time_zone_transition_type.frm
db.MYD help_category.MYI index_stats.MYI proxies_priv.MYD table_stats.MYD time_zone_transition_type.MYD
db.MYI help_keyword.frm innodb_index_stats.frm proxies_priv.MYI table_stats.MYI time_zone_transition_type.MYI
event.frm help_keyword.MYD innodb_index_stats.ibd roles_mapping.frm time_zone.frm transaction_registry.frm
event.MYD help_keyword.MYI innodb_table_stats.frm roles_mapping.MYD time_zone_leap_second.frm transaction_registry.ibd
event.MYI help_relation.frm innodb_table_stats.ibd roles_mapping.MYI time_zone_leap_second.MYD user.frm
func.frm help_relation.MYD plugin.frm servers.frm time_zone_leap_second.MYI user.MYD
func.MYD help_relation.MYI plugin.MYD servers.MYD time_zone.MYD user.MYI
func.MYI help_topic.frm plugin.MYI servers.MYI time_zone.MYI
=============================================================进入数据库中查看数据库中的表(数据)命令,注意加分号:
MariaDB [mysql]> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| column_stats |
| columns_priv |
| db |
| event |
| func |
| general_log |
| gtid_slave_pos |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| index_stats |
| innodb_index_stats |
| innodb_table_stats |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| roles_mapping |
| servers |
| slow_log |
| table_stats |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| transaction_registry |
| user |
+---------------------------+
31 rows in set (0.001 sec)
=========================================================查看user中的字段(field),注意加分号:
MariaDB [mysql]> desc user ;
+------------------------+-----------------------------------+------+-----+----------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+----------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(80) | NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| Delete_history_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) | NO | | 0 | |
| plugin | char(64) | NO | | | |
| authentication_string | text | NO | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| is_role | enum('N','Y') | NO | | N | |
| default_role | char(80) | NO | | | |
| max_statement_time | decimal(12,6) | NO | | 0.000000 | |
+------------------------+-----------------------------------+------+-----+----------+-------+
47 rows in set (0.002 sec)
================================================================从这个user表中field(字段)中挑出特定的字段来查看里面的内容,注意加分号:
由6中结果可见默认安装后只能在本机(远程不行)且用root虚拟用户身份(也可以匿名任意用户)连接mysql数据库。
用户为空的项代表匿名用户,它表示任何用户名(随便输入)都可以登录这个数据库,比如说 mysql -u abc 命令也可以登录(但是空用户不能登陆 必须得输入字符才可以)
MariaDB [mysql]> select user,host,password from user;
+------+---------------+----------+
| user | host | password |
+------+---------------+----------+
| root | localhost | | :指的是本机网段127开头
| root | centos7.6test | | :指的是本机IP 192.168.36.102(或者其他网卡上的IP)
| root | 127.0.0.1 | |
| root | ::1 | | :IPV6上本机IP
| | localhost | | :匿名用户
| | centos7.6test | | :匿名用户
+------+---------------+----------+
6 rows in set (0.001 sec)
========================================默认安装后匿名用户直接登陆,以及用它查看数据库信息(权限不如root大,看到的信息不如root多):
22:07[root@centos7 /var/lib/mysql]# mysql -u abc
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.3.14-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select user() ;
+---------------+
| user() |
+---------------+
| abc@localhost |
+---------------+
1 row in set (0.000 sec)
MariaDB [(none)]> show databases ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.001 sec)
==========================================执行安全加固安装脚本之后:
MariaDB [mysql]> select user,host,password from user
-> ;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-----------+-------------------------------------------+
3 rows in set (0.001 sec)
======================================查看写入配置文件中的设定:
11:38[root@centos7 ~]# mysql --print-defaults
mysql would have been started with the following arguments:
--prompt=Date:\D Count:\c \n\U[\d] >
服务器监听的两种socket地址:
ip socket: 监听在tcp的3306端口,支持远程通信
unix sock: 监听在sock文件上,仅支持本机通信
如:/var/lib/mysql/mysql.sock)
说明:host为localhost,127.0.0.1时自动使用unix sock
服务器端(mysqld):工作特性有多种配置方式
配置文件:
后面覆盖前面的配置文件,顺序如下:
12:28[root@centos7 ~]# ps aux | grep mysql
root 403 0.0 0.0 112708 976 pts/2 S+ 12:29 0:00 grep --color=auto mysql
mysql 66126 0.0 3.7 1768932 70740 ? Ssl Apr28 0:42 /usr/sbin/mysqld
root 125855 0.0 0.1 119868 2552 pts/0 S+ 11:08 0:00 man mysql
12:29[root@centos7 ~]# getent passwd mysql
mysql:x:988:982:MySQL server:/var/lib/mysql:/sbin/nologin
12:30[root@centos7 ~]#
创建用户preinstallscript中的创建mysql系统用户以及修改数据库文件的权限命令:
# Create a MySQL user and group. Do not report any problems if it already
# exists.
groupadd -r mysql 2> /dev/null || true
useradd -M -r --home $datadir --shell /sbin/nologin --comment "MySQL server" --gid mysql mysql 2> /dev/null || true
# The user may already exist, make sure it has the proper group nevertheless (BUG#12823)
usermod --gid mysql mysql 2> /dev/null || true
# Change permissions so that the user that will run the MySQL daemon
# owns all database files.
chown -R mysql:mysql $datadir
if [ ! -e $datadir/mysql ]; then
# Create data directory
mkdir -p $datadir/{mysql,test}
# Initiate databases
/usr/bin/mysql_install_db --rpm --user=mysql
fi
# Change permissions again to fix any new files.
chown -R mysql:mysql $datadir
# Fix permissions for the permission database so that only the user
# can read them.
chmod -R og-rw $datadir/mysql
fi
Mariadb安装方式:
CentOS 安装光盘:可安装但是版本太老
项目官方:https://downloads.mariadb.org/mariadb/repositories/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/
https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/
提前做好前两步操作,然后
cd mariadb-10.2.18/
cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/mysql \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
然后make && make install
提示:如果出错,执行rm -f CMakeCache.txt
===============================================centos7:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
===============================================centos6:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
转载于:https://blog.51cto.com/14228129/2388605