MySQL 简介
-
安装后目录结构
-
mysql.exe:客户端
-
mysqld.exe:服务器
-
my.ini:总配置文件
-
-
在windows下开户和关闭mysql服务器
-
net start mysql
-
net stop mysql
-
-
登录和退出mysql客户端
-
mysql -u用户名 -p密码 -hIP
-
exit或quit
-
SQL
-
解释:结构化查询语言
-
ISO:国际标准化组织
-
ISO定义了很多SQL标准,例如:SQL99
-
各个数据库厂商需要遵循这个标签!但各个厂商也有自己的方言
-
SQL的分类
-
DDL:数据定义语言
-
DML:数据操作语言
-
DCL:数据控制语言
-
DQL(不在标准中):数据查询语言
-
DDL:数据定义语言
-
数据库的操作
-
create database
-
show databases
-
use mydb1
-
alter database
-
drop database
-
-
表的操作
-
create table
-
show tables
-
desc mytable1
-
drop table
-
alter table
-
add
-
modify
-
change
-
drop
-
rename to
-
-
DML:数据操作语言
-
插入记录
-
修改记录
-
删除记录
-
delete
-
truncat
-
DCL:数据控制语言
-
创建用户
-
授权
-
撤消权限
-
查看权限
-
删除用户
DQL:数据查询语言
-
基本查询
-
查看整张表
-
select * from 表名
-
-
列控制
-
列运算:select sal * 1.5 from emp
-
列运算:连接字符串:select concat(‘我的名称是’, ename) from emp
-
处理NULL值:select sal + IFNULL(comm, 0) from emp
-
select ename 姓名 from emp
-
去除完全重复的行:select distinct comm from emp
-
-
-
条件查询
-
模糊查询
-
下划线
-
百分号
-
-
-
排序
-
降序:desc
-
升序:asc
-
-
聚合函数
-
数量:count
-
求最小值:min
-
求最大值:max
-
求和:sum
-
求平均:avg
-
-
分组
-
group by
-
having
-
limit
-
约束
-
约束保证数据的完整性和一致性
-
约束分为表级约束和列级约束
-
对一个数据列建立的约束,列级约束
-
对多个数据列建立的约束,表级约束
-
-
约束类型包括:
-
NOT NULL
-
PRIMARY KEY
-
UNIQUE KEY
-
DEFAULT
-
FOREIGN KEY
-
中文无法插入解决办法
-
dos 下不支持直接使用utf8;
-
set names gbk,再插入即可。
连接类型
-
内连接
-
显示左表及右表符合连接条件的记录
-
-
左外连接
-
显示左表的全部记录及右表符合连接条件的记录
-
-
右外连接
-
显示右表的全部记录及左表符合连接条件的记录
-
-
自身连接
-
同一个数据表对其自身进行连接
-
MySQL常见的扩展方式Scale Up、Scale Out。
MySQL数据库的切分:垂直切分:分库、水平切分:分表。
MySQL存储引擎之InnoDB、MyISAM引擎。
数据库定义了存储信息的结构。以表的方式存储信息。
索引:将表中的某一个或某些字段抽取出来,单独将其组织一个独特的数据结构中,类似一本书的目录;
数据库的概述
-
DBMS:关系型数据库管理系统
-
库管+N个仓库
-
-
常见的数据库管理系统
-
MySQL
-
Orcale
-
DB2
-
SQL Server
-
Sybase
-
常用存储引擎介绍;
- MyISAM :不支持事务;表级锁,崩溃后不保证安全恢复
- MyISAM :Aria:增强版,崩溃后可以修复
- InnoDB :XtraDB 支持 行级锁,外键,热备
MySQL属于关系型数据库,关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。用户用查询(Query)来检索数据库中的数据。一个Query是一个用于指定数据库中行和列的SELECT语句。
在数据库的应用方面,一般又分为两种角色:
- 一种是应用开发者,在公司里一般被称为“服务器工程师”或“web开发工程师”
- 一种是数据库管理者,在公司一般被称为“DBA”(DataBase Administrator)或“运维;
数据库的使用方面分为三个层次
- 数据库的基本使用
- 利用面向对象的思维使用数据库
- 在项目中应用分布式数据库
MySQL复制环境
MySQL复制种类 :
1、标准异步复制
异步复制意味着事务完全在本地环境中完成,并且不受复制从属本身的影响。完成更改后,主服务器将使用数据修改或实际语句(基于行的复制或基于语句的复制之间的差异会在之后讲)填充二进制日志。此转储线程读取二进制日志并将其发送到从IO线程。从站使用其IO线程将其置于自己的预处理队列(称为中继日志)中。从站使用SQL线程执行从站数据库上的每个更改。
2、半同步复制
半同步复制意味着从设备和主设备相互通信以保证事务的正确传输。主设备仅填充binlog并继续其会话,其中一个从设备确认事务已正确放置在从设备的中继日志中。
半同步复制可确保正确复制事务,但不保证实际发生从设备上的提交。
需要注意的是,半同步复制可确保主服务器等待继续处理特定会话中的事务,直到至少有一个从服务器确认接收到事务(或达到超时)。这与异步复制不同,因为半同步允许额外的数据完整性。
请记住,半同步复制会影响性能,因为它需要等待来自从站的实际ACK的往返。
3、组复制
这是MySQL Community Edition 5.7中引入的新概念,并且在MySQL 5.7.17中进行了GA。这是一个用于虚拟同步复制的新插件。
每当在节点上执行事务时,插件都会尝试与其他节点达成共识,然后再将其返回给客户端。 虽然与标准MySQL复制相比,该解决方案是完全不同的概念,但它基于使用binlog生成和处理日志事件。
以下是组复制的示例体系结构。
注意 :
标准异步复制不是同步集群。请记住,标准和半同步复制不保证环境服务于同一数据集。使用Percona XtraDB Cluster时,每个服务器实际上需要分别处理每个更改。如果不是,则从群集中删除受影响的节点。异步复制不具有此故障安全性,在不一致的情况下,仍然可以接受读操作。
从理论上讲,环境应具有可比性。但是,有许多参数会影响数据传输的效率和一致性。只要使用异步复制,就无法保证事务正确发生。使用者可以通过增强配置的持久性来避免这种情况,但这会带来性能损失。
使用pt - table - checksum工具验证主服务器和从服务器的一致性 。
有复制就不需要备份了
MySQL的事务
请求<-->响应 的处理过程
多个操作被当做一个整体对待,要想看一个关系型管理数据库系统是否支持事务就要看关系型数据库系统是否满足ACID测试
- ACID 事务的一个基本标准
- A:原子性
- C:一致性
- I:隔离性
- D:持久性
SQL语句对数据库管理常用的两种方式:
- DDL:数据定义语言-主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用,创建表的时候有问题看这里。
- CREATE: 创建
- ALTER:改变
- DROP: 删除
- SHOW: 显示
- DML:数据操纵语言-这4条命令是用来对数据库里的数据进行操作的语言,修改表的时候有问题看这里。
- INSERT: 添加
- DELETE: 删除
- SELECT: 选择
- UPDATE: 修改
这里通配符有两个需要注意:
- %:任意长度的任意字符;
- _:任意单个字符;
MySQL与MariaDB
MariaDB属于插件式存储引擎(存储引擎也称为“表类型”;):存储管理器有多种实现版本,彼此间的功能和特性可能略有区别;用户可根据需要灵活选择;
MySQL优点有: 1.综合统一 2.高度非过程化 3.面向集合的操作方式 4.以一种语法结构提供多种使用方式 5.语言简洁,易学易用
MySQL 安装
本教程的系统平台:CentOS release 6.6 (Final) 64位。
一、安装编译工具及库文件
[root@localhost ~]# cd /usr/local/src
yum -y install gcc gcc-c++ make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel bison patch unzip libmcrypt-devel libmhash-devel ncurses-devel sudo bzip2 flex libaio-devel
二、 安装cmake 编译器
cmake 版本:cmake-3.1.1。
1、下载地址:http://www.cmake.org/files/v3.1/cmake-3.1.1.tar.gz
$ wget http://www.cmake.org/files/v3.1/cmake-3.1.1.tar.gz
2、解压安装包
$ tar zxvf cmake-3.1.1.tar.gz
3、进入安装包目录
$ cd cmake-3.1.1
4、编译安装
$ ./bootstrap $ make && make install
三、安装 MySQL
MySQL版本:mysql-5.6.15。
1、下载地址: http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15.tar.gz
2、解压安装包
$ tar zxvf mysql-5.6.15.tar.gz
3、进入安装包目录
$ cd mysql-5.6.15
4、编译安装
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/webserver/mysql/ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_INNODB_MEMCACHED=1 -DWITH_DEBUG=OFF -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DENABLED_PROFILING=ON -DMYSQL_MAINTAINER_MODE=OFF -DMYSQL_DATADIR=/usr/local/webserver/mysql/data -DMYSQL_TCP_PORT=3306 $ make && make install
5、查看mysql版本:
$ /usr/local/webserver/mysql/bin/mysql --version
到此,mysql安装完成。
MySQL 配置
1、创建mysql运行使用的用户mysql:
$ /usr/sbin/groupadd mysql $ /usr/sbin/useradd -g mysql mysql
2、创建binlog和库的存储路径并赋予mysql用户权限
$ mkdir -p /usr/local/webserver/mysql/binlog /www/data_mysql $ chown mysql.mysql /usr/local/webserver/mysql/binlog/ /www/data_mysql/
3、创建my.cnf配置文件
将/etc/my.cnf替换为下面内容
$ cat /etc/my.cnf [client] port = 3306 socket = /tmp/mysql.sock [mysqld] replicate-ignore-db = mysql replicate-ignore-db = test replicate-ignore-db = information_schema user = mysql port = 3306 socket = /tmp/mysql.sock basedir = /usr/local/webserver/mysql datadir = /www/data_mysql log-error = /usr/local/webserver/mysql/mysql_error.log pid-file = /usr/local/webserver/mysql/mysql.pid open_files_limit = 65535 back_log = 600 max_connections = 5000 max_connect_errors = 1000 table_open_cache = 1024 external-locking = FALSE max_allowed_packet = 32M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 600 #thread_concurrency = 8 query_cache_size = 128M query_cache_limit = 2M query_cache_min_res_unit = 2k default-storage-engine = MyISAM default-tmp-storage-engine=MYISAM thread_stack = 192K transaction_isolation = READ-COMMITTED tmp_table_size = 128M max_heap_table_size = 128M log-slave-updates log-bin = /usr/local/webserver/mysql/binlog/binlog binlog-do-db=oa_fb binlog-ignore-db=mysql binlog_cache_size = 4M binlog_format = MIXED max_binlog_cache_size = 8M max_binlog_size = 1G relay-log-index = /usr/local/webserver/mysql/relaylog/relaylog relay-log-info-file = /usr/local/webserver/mysql/relaylog/relaylog relay-log = /usr/local/webserver/mysql/relaylog/relaylog expire_logs_days = 10 key_buffer_size = 256M read_buffer_size = 1M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 64M myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G myisam_repair_threads = 1 myisam_recover interactive_timeout = 120 wait_timeout = 120 skip-name-resolve #master-connect-retry = 10 slave-skip-errors = 1032,1062,126,1114,1146,1048,1396 #master-host = 192.168.1.2 #master-user = username #master-password = password #master-port = 3306 server-id = 1 loose-innodb-trx=0 loose-innodb-locks=0 loose-innodb-lock-waits=0 loose-innodb-cmp=0 loose-innodb-cmp-per-index=0 loose-innodb-cmp-per-index-reset=0 loose-innodb-cmp-reset=0 loose-innodb-cmpmem=0 loose-innodb-cmpmem-reset=0 loose-innodb-buffer-page=0 loose-innodb-buffer-page-lru=0 loose-innodb-buffer-pool-stats=0 loose-innodb-metrics=0 loose-innodb-ft-default-stopword=0 loose-innodb-ft-inserted=0 loose-innodb-ft-deleted=0 loose-innodb-ft-being-deleted=0 loose-innodb-ft-config=0 loose-innodb-ft-index-cache=0 loose-innodb-ft-index-table=0 loose-innodb-sys-tables=0 loose-innodb-sys-tablestats=0 loose-innodb-sys-indexes=0 loose-innodb-sys-columns=0 loose-innodb-sys-fields=0 loose-innodb-sys-foreign=0 loose-innodb-sys-foreign-cols=0 slow_query_log_file=/usr/local/webserver/mysql/mysql_slow.log long_query_time = 1 [mysqldump] quick max_allowed_packet = 32M
4、初始化数据库
$/usr/local/webserver/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql
显示如下信息:
Installing MySQL system tables...2015-01-26 20:18:51 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). OK Filling help tables...2015-01-26 20:18:57 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). OK ...
5、创建开机启动脚本
$ cd /usr/local/webserver/mysql/ $ cp support-files/mysql.server /etc/rc.d/init.d/mysqld $ chkconfig --add mysqld $ chkconfig --level 35 mysqld on
6、启动mysql服务器
$ service mysqld start
7、连接 MySQL
$ /usr/local/webserver/mysql/bin/mysql -u root -p
修改MySQL用户密码
mysqladmin -u用户名 -p旧密码 password 新密码
或进入mysql命令行
SET PASSWORD FOR '用户名'@'主机' = PASSWORD(‘密码');
创建新用户并授权:
grant all privileges on *.* to 用户名@'%' identified by '密码' with grant option;
其他命令
- 启动:service mysqld start
- 停止:service mysqld stop
- 重启:service mysqld restart
- 重载配置:service mysqld reload
启动MySQL服务器程序,确认状态
1)启动MySQL服务程序
启动服务并查看状态:
[root@dbsvr1 pub]# service mysql start Starting MySQL... [确定] [root@dbsvr1 pub]# service mysql status MySQL running (31724) [确定]
服务器进程为mysqld,监听的默认端口为TCP 3306:
[root@dbsvr1 pub]# netstat -anpt | grep mysql tcp 0 0 :::3306 :::* LISTEN 31724/mysqld
2)查看MySQL服务器进程、运行用户
提供连接服务的进程为mysqld,由其父进程mysqld_safe启动。
[root@dbsvr1 pub]# ps -elf | grep mysqld 4 S root 31619 1 0 80 0 - 2834 wait 15:14 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid file=/var/lib/mysql/dbsvr1.tarena.com.pid 4 S mysql 31724 31619 0 80 0 - 252496 poll_s 15:14 pts/0 00:00:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/dbsvr1.tarena.com.err --pid-file=/var/lib/mysql/dbsvr1.tarena.com.pid
数据库的默认存放位置为 /var/lib/mysql:
[root@dbsvr1 pub]# ls /var/lib/mysql/ auto.cnf ibdata1 mysql RPM_UPGRADE_HISTORY dbsvr1.tarena.com.err ib_logfile0 mysql.sock RPM_UPGRADE_MARKER-LAST dbsvr1.tarena.com.pid ib_logfile1 performance_schema test
参考链接 :
百度百科 :https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9326379813681396417%22%7D&n_type=1&p_from=4