一:基础概念

常见的数据库类型

关系型数据库

以二维表格(行和列,类似excel)来存储数据,表格与表格之间的数据关系用字段引用来表示。
Oraele,SQL Server,MySQL,DB2等。

非关系型数据库

面向高性能并发读写的key-value数据库:Redis,ToKyo,Cabinet,Flare等。

面向海量数据访问的稳定性数据库

特点:在海量数据中快速查询数据:MongoDB,CouchDB等。

面向可扩展性的分布式数据库

解决传统数据库存在可扩展性上的缺陷:Cassandra。

MySQL数据库介绍

MySQL是一种开放源码的关系型数据库管理系统(RDBMS)。

MySQL数据库系统使用最常用的数据库管理语言--结构化查新语言(SQL)进行数据库管理。

特点

体积小,速度快,总体拥有成本低,开放源码。

通用数据库对象中英文介绍

数据data

指对客观事件进行记录并可以鉴别的符号,在计算机系统中存储为可以被识别的信息

数据库database

存放具体数据的最大逻辑对象,通常按需求将同一项目所属的数据统一放在一个数据库中,也可以创建多个数据库。

数据库管理系统dbms(database management system)

是一种操纵和管理数据库的大型软件,用于创建、使用和维护数据库,简称DBMS,目前分为关系型和非关系型数据库管理系统俩种。

关系型数据库管理系统rdbms(relational dnms)

是以关系模型为基础建立的数据库管理软件,典型代表为Oracle,MySQL,SQL Server等。

实例instance

数据库管理软件安装之后再服务器上启动起来就成为启动了一个实例,通常一个服务器上只启动一个数据库实例,但是也有启动多个实例的,一个实例可以包含多个数据库。

数据库对象 database object

数据库中创建的用来存储,操作数据的对象,比如表,字段,索引,存储过程等。

表table

数据库对象中的一种,用来存储相同属性的数据,类似Excel表格的sheet

字段field,列columm,属性attribute

表中数据的组成部分,类似Excel

类型

,每个字段属性之一,代表该字段下的所有数据以什么形式呈现,比如整数、字符串类型

键值key

数据表的一个属性,可以指定主键、外键

索引index

在数据库管理系统中通常为加速数据读取而创建的一种数据结构。

视图

为简化部分数据的获取方法而创建的定义

存储过程sp(stored procedure)

在数据库内部创建的具有一系列数据处理逻辑的方法。

触发器trigger

当数据库表发生修改操作时自动触发某些数据处理的方法。

主键primary key

数据表中定义的用来唯一确定表中各行数据的一个或几个字段

外键forerign key

当数据表中的某一个或几个字段的值来源于某个父表时,则可以创建俩个表之间的数据映射关系。

唯一unique

Primary key和unique index都可以作为约束表中这一列或几列的数据不重复。

 

性能proformance

调优tuning

 

备份

将数据库中的所有数据和对象或指定的数据和对象导出成文件形式存储

恢复restore

利用之前的备份文件将数据库中的指定对象和库还原到备份文件中的状态。

用户user

指为访问数据库中的数据而创建的用户。

授权grant

授予某个数据库用户某个权限的动作。

回收revoke

将某个数据库用户的某个权限回收的动作

权限privilege

 

查询select

数据库中浏览数据所提供的方法

修改update

数据库中修改数据所提供的方法

删除delete

数据库中删除原有数据所提供的方法

添加insert

数据库中新增数据所提供的方法

SQL语句SQL statemen

对数据库中数据进行操作、管理的一套语法。

数据库架构database architecture

指数据库设计工作中对数据库一个或多个实例的部署,之间的数据协同,高可用性,并发性等特性所做的统一规划。

下载安装

MySQL社区版下载页面

https://dev.mysql.com/downloads/mysql/


 

mysql 分布式数据库缺点 mysql是分布式数据库_数据库

 

 

 

版本

区别

MySQL5.5

默认存储引擎更改为InnoDB,提高性能和可扩展性,增加半同步复制

MySQL5.6

提高InnoDB性能,支持延迟复制。

MySQL5.7

提升数据库性能和存储引擎,更健壮的复制功能,增加sys系统库存放数据库管理信息。

准备

选择安装的MySQL版本

首先判断是否要和公司其他已经安装好的MySQL保存版本一致。
如果没有上述要求,则一般安装最新版本。
如果不是实验新功能性质,则不要选择development release,而要安装General Availability(GA)release(代表稳定版本,可在生产系统使用)

选择安装方式

二进制安装包的方式(RPM,ZIP,TAR等。)

 

源码方式

一般会选择二进制安装方式
如果有特殊要求,比如修改一部分源码或修改MySQL深层次的配置,则会选择源码方式。

二进制安装步骤:

卸载mariadb 删除/etc/my.cnf文件

yum -y remove mari*
\rm /etc/my.cnf

下载正确的tar包

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz

解压tar包到 /usr/local/ 目录

xz -d mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz
tar xvf  mysql-8.0.13-linux-glibc2.12-x86_64.tar -C  /usr/local/

创建运行MySQL的用户和组

useradd mysql  # 系统默认创建同名的用户组,无须单独创建mysql组

创建数据目录

cd  /usr/local/
ln -s mysql-8.0.13-linux-glibc2.12-x86_64 mysql
cd mysql
mkdir data
chown mysql:mysql data/

初始化数据目录

bin/mysqld --initialize --user=mysql --datadir /usr/local/mysql/data

临时密码

mysql 分布式数据库缺点 mysql是分布式数据库_mysql_02

 

 

 

bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
则需要安装包yum install -y libaio

若不是解压到了推荐路径 /usr/local/ 则初始化目录方法如下

bin/mysqld --initialize --user=mysql -basedir=/data/mysql --datadir=/data/mysql/data

MySQL加入到服务自启动

cp support-files/mysql.server /etc/init.d/
chkconfig mysql.server on

启动MySQL服务

/etc/init.d/mysql.server start

添加环境变量

vim ${HOME}/.bash_profile
修改  #  PATH=$PATH:$HOME/bin:/usr/local/mysql/bin/
重载  #  source ${HOME}/.bash_profile

登录

[root@node-01 mysql]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.13
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show  databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql>

修改密码

ALTER user 'root'@'localhost' IDENTIFIED BY 'mysql';   # 不用刷新权限

修改默认端口

[root@node-01 ~]# netstat -tunlp|grep 3306
tcp6       0      0 :::33060                :::*                    LISTEN      17891/mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      17891/mysqld
[root@node-01 ~]# cat   /etc/my.cnf
[mysqld]
port=3307
[root@node-01 ~]# /etc/init.d/mysql.server restart
Shutting down MySQL... SUCCESS!
Starting MySQL. SUCCESS!
[root@node-01 ~]# netstat -tunlp|grep 330
tcp6       0      0 :::3307                 :::*                    LISTEN      7975/mysqld
tcp6       0      0 :::33060                :::*                    LISTEN      7975/mysqld

迁移数据目录

停止数据库。

/etc/init.d/mysql.server stop

将原datadir目录的内容复制到新目录data2下。注意权限

cd  /usr/local/mysql/
mkdir data2
chown mysql:mysql /usr/local/mysql/data2
cp -a data/* data2/

修改配置文件/etc/my.cnf的datadir。

datadir=/usr/local/mysql/data2

启动数据库。

/etc/init.d/mysql.server start

 

单主机创建多实例

前面解压步骤一样,我将再创建3个数据库实例:4036、4037、4038

 

创建数据目录

mkdir -p /data/403{6..8}
chown -R mysql:myqsl /data/
chown -R mysql:mysql /data/

创建三个配置文件

cat  <<EOF > /etc/my_4036.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/4036
socket=/tmp/mysql_4036.sock
port=4036
mysqlx_port=40360
[mysqld_safe]
log-error=/data/4036/mysql.log
pid-file=/data/4036/mysqld.pid
EOF
cat  <<EOF > /etc/my_4037.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/4037
socket=/tmp/mysql_4037.sock
port=4037
mysqlx_port=40370
[mysqld_safe]
log-error=/data/4037/mysql.log
pid-file=/data/4037/mysqld.pid
EOF
cat  <<EOF > /etc/my_4038.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/4038
socket=/tmp/mysql_4038.sock
port=4038
mysqlx_port=40380
[mysqld_safe]
log-error=/data/4038/mysql.log
pid-file=/data/4038/mysqld.pid
EOF

初始化实例

mysqld --defaults-file=/etc/my_4036.cnf  --initialize --user=mysql
mysqld --defaults-file=/etc/my_4037.cnf  --initialize --user=mysql
mysqld --defaults-file=/etc/my_4038.cnf  --initialize --user=mysql

启动实例

mysqld_safe --defaults-file=/etc/my_4036.cnf --user=mysql &
mysqld_safe --defaults-file=/etc/my_4037.cnf --user=mysql &
mysqld_safe --defaults-file=/etc/my_4038.cnf --user=mysql &

登录实例修改密码

mysql -S /tmp/mysql_4036.sock -uroot -p
ALTER USER root@'localhost' IDENTIFIED BY '123456';
mysql -S /tmp/mysql_4037.sock -uroot -p
ALTER USER root@'localhost' IDENTIFIED BY '123456';
mysql -S /tmp/mysql_4038.sock -uroot -p
ALTER USER root@'localhost' IDENTIFIED BY '123456';

关闭实例

mysqladmin -S /tmp/mysql_4036.sock -uroot -p123456 shutdown
mysqladmin -S /tmp/mysql_4037.sock -uroot -p123456 shutdown
mysqladmin -S /tmp/mysql_4038.sock -uroot -p123456 shutdown

 

创建用户

mysql8.0无法给用户授权或提示You are not allowed to create a user with GRANT、for the right syntax to use near 'identified by xxx'的问题

提示意思是不能用grant创建用户,mysql8.0以前的版本可以使用grant在授权的时候隐式的创建用户,8.0以后已经不支持,所以必须先创建用户,然后再授权,命令如下:

GRANT ALL ON *.* TO 'root'@'%';
grant all privileges on *.* to 'root'@'%';

 

mysqld_safe与mysqld区别

mysqld_safe与mysqld区别,直接运行mysqld程序来启动MySQL服务的方法很少见,mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。

 

用mysqld_safe脚本来启动MySQL服务器的做法在BSD风格的unix系统上很常见,非BSD风格的UNIX系统中的 mysql.server脚本其实也是调用mysqld_safe脚本去启动MySQL服务器的。

它通常做如下事情:
1. 检查系统和选项。
2. 检查MyISAM表。
3. 保持MySQL服务器窗口。
4. 启动并监视mysqld,如果因错误终止则重启。
5. 将mysqld的错误消息发送到数据目录中的host_name.err 文件。
6. 将mysqld_safe的屏幕输出发送到数据目录中的host_name.safe文件。

【mysqld】:是mysql的核心程序,用于管理mysql的数据库文件以及用户的请求操作。mysqld可以读取配置文件中的[mysqld]的部分

【mysqld_safe】:相当于多了一个守护进程,mysqld挂了会自动把mysqld进程拉起来
1.可以读取的配置部分[mysqld],[server],[myslqd_safe], 为了兼容mysql_safe也会读取[safe_mysqld]中的配置
2.调用的mysqld是可以在[mysqld_safe]中用-mysqld, --mysqld-version指定
bin/mysqld_safe --defaluts-file=/etc/mysql/my.cnf &

参数

--basedir=path  #MySQL安装目录的路径。
--datadir=path   #数据目录的路径。
--defaults-extra-file=path  #除了通用选项文件所读取的选项文件名。如果给出,必须首选该选项。
--defaults-file=path      #读取的代替通用选项文件的选项文件名。如果给出,必须首选该选项。
--log-error=path          #将错误日志写入给定的文件。
--no-defaults            #不要读任何选项文件。如果给出,必须首选该选项。
--open-files-limit=count  #mysqld能够打开的文件的数量。选项值传递给 ulimit -n。请注意你需要用root启动mysqld_safe来保证正确工作。
--pid-file=path  #进程ID文件的路径。
--port=port_num  #用来帧听TCP/IP连接的端口号。端口号必须为1024或更大值,除非MySQL以root系统用户运行。
--skip-character-set-client-handshake   #忽略客户端发送的字符集信息,使用服务器的默认字符集。(选择该选项,MySQL的动作与MySQL 4.0相同)。
--socket=path   #用于本地连接的Unix套接字文件。
--timezone=zone #为给定的选项值设置TZ时区环境变量。从操作系统文档查阅合法的时区规定格式。
--user={user_name | user_id}   #以用户名user_name或数字用户ID user_id运行mysqld服务器。(本文中的“用户”指系统登录账户,而不是 授权表中的MySQL用户)。

执行mysqld_safe时,必须先给出--defaults-file或--defaults-extra-option,或不使用选项文件。

该命令将不使用选项文件,因为第一个参数不是选项文件:

mysqld_safe --port=3306 --defaults-file=/etc/mysql/my.cnf

相反,使用下面的命令,则可以使用选项文件:

mysqld_safe --defaults-file=/etc/mysql/my.cnf --port=3306

navicat链接mysql8出现2059错误

mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password

mysql -uroot -pWhb12369.* #登录
use mysql; #选择数据库
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; #更改加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; #更新用户密码
FLUSH PRIVILEGES; #刷新权限

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql';