编写应用程序不方便
数据冗余不可避免
应用程序依赖性
不支持对文件的并发访问
数据间联系弱
难以按用户视图表示数据
无安全控制功能html
相互关联的数据的集合
较少的数据冗余
程序与数据相互独立
保证数据的安全、可靠
最大限度地保证数据的正确性
数据能够并发使用并能同时保证一致性mysql
数据库是数据的聚集,它以必定的组织形式存于存储介质上
DBMS是管理数据库的系统软件,它实现数据库系统的各类功能。是数据库系统的核心
DBA(团队):负责数据库的规划、设计、协调、维护和管理等工做
应用程序指以数据库为基础的应用程序linux
数据定义
数据处理
数据安全
数据备份c++
单机架构 :好比access,一些财务数据库
大型主机/终端架构:一个大型主机带多套键鼠显示屏设备(终端)
主从式架构(C/S):主流的客户端服务端架构
分布式架构 :集群正则表达式
关系 :关系就是二维表,其中:表中的行、列次序并不重要
行row(record):表中的每一行,又称为一条记录
列column(field):表中的每一列,称为属性或字段
主键Primary key:用于唯一肯定一个记录的字段,一张表只能一个主键,且主键(或者复合主键)的字段不能重复
域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值redis
数据库规范化,又称数据库或资料库的正规化、标准化,是数据库设计中的一系列原理和技术,以减小数据库中数据冗余,增进数据的一致性。关系模型的发明者埃德加·科德最先提出这一律念,并于1970年代初定义了第一范式、第二
范式和第三范式的概念
RDMBS设计范式基础概念:设计关系数据库时,听从不一样的规范要求,设计出合理的关系型数据库,不一样的规范要求被称为不一样范式,各类范式呈递次规范,越高的范式数据库冗余越小
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。知足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步知足更多规范要求的称为第二范式(2NF),其他范式以次类推。通常数据库只需知足第三范式(3NF)便可sql
附加知识点: /etc/gconf/gconf.xml.gefaults中大部分都是xml文件(图形界面的xml文件)
其中有个%gconf-tree.xml文件,里面的文件代码格式就是xml格式。
在Cenots6中这个文件中的disable_user_list一行,这里的它下面的type 中的value改成true,则centos6登录的时候只能手动输入用户名而不会显示用户名的列表能够鼠标点选了。shell
插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差异;用户可根据须要灵活选择,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