MYSQL服务

一、mysql介绍

 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司 (10亿美金收购的MySQL)。
       MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。


其他数据库
Oracle(银行)、DB2(政府)、SQL Server  mariadb(类似于MySQL)   神州通用数据库(国产收费仿Oracle)  达梦数据库(国产免费)

mysql 特点
1.使用C和C++编写(速度快),并使用了多种编译器进行测试,保证源代码的可移植性。
2.支持AIX(小型机)、FreeBSD(linux最优秀的图形界面)、HP-UX(惠普linux)、Linux、Mac OS、OpenBSD(图形化界面)、Windows等多种操作系统。
3.为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、朝鲜语言等。
4.支持多线程,充分利用CPU资源。
5.优化的SQL查询算法,有效地提高查询速度。
6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
8.提供TCP/IP、ODBC和JDBC(引擎)等多种数据库连接途径。
9.提供用于管理、检查、优化数据库操作的管理工具。
10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。正常600w分表
11.支持多种存储引擎。


mysql 

MyISAM Mysql5.5之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务日志

InnoDB事务型数据库的首选引擎,支持ACID事务日志,支持行级锁定, MySQL 5.5起成为默认数据库引擎

BDB源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性

Memory所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失

Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用

Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差

Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用

Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV: 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。

BlackHole :黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继(类似/dev/null)

EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。


mysql单表理论上可以放18446744073709551616数据  ((2^32)^2)

一般600W就建议分表   mysql公司有千万记录的表。
1000W记录大概2-3G(搜索一条大概5分钟)备份一次需要3-4小时,恢复需要10小时左右


二、mysql的安装

在Windows上安装MySQL
下载MySQL安装程序:
访问MySQL官方网站的下载页面(MySQL :: Download MySQL Community Server)。
选择适合你系统的安装包,通常推荐使用“MySQL Installer for Windows”,它支持图形界面安装。
运行安装程序:
双击下载的安装文件启动MySQL安装向导。
按照屏幕上的指示进行操作,你可以选择设置类型(如Developer Default, Server Only等)。
配置MySQL:
安装过程中,你需要设置root用户的密码以及其他安全选项。
根据需要配置其他高级选项。
完成安装:
安装完成后,可以通过命令行或者MySQL Workbench来验证是否安装成功。
在macOS上安装MySQL
使用Homebrew安装(推荐方法):
如果还没有安装Homebrew,可以在终端中执行/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"来安装。
然后在终端中执行brew install mysql来安装MySQL。
启动MySQL服务:
使用brew services start mysql来启动MySQL服务。
初始化配置:
首次安装后,你可能需要执行mysql_secure_installation来提高安全性,包括设置root用户密码等。
在Linux(以Ubuntu为例)上安装MySQL
更新软件源列表:
sudo apt update


安装MySQL服务器:
sudo apt install mysql-server


启动并使能MySQL服务:
sudo systemctl start mysql
sudo systemctl enable mysql


运行安全脚本:
执行sudo mysql_secure_installation来设置root密码和改善安全选项。


登录MySQL:
使用sudo mysql -u root -p来登录MySQL控制台。

三、mysql远程登录授权

允许MySQL数据库接受远程连接并进行授权,你需要执行以下几个步骤。请注意,出于安全考虑,应该谨慎地配置远程访问权限,并确保你的服务器有适当的防火墙设置来限制对数据库端口的访问。

步骤 1: 修改 MySQL 配置文件


默认情况下,MySQL 只监听本地连接。你需要修改 MySQL 的配置文件以允许它监听来自远程主机的连接。

在大多数Linux系统中,这个文件位于/etc/mysql/my.cnf或者/etc/my.cnf。
找到[mysqld]部分下的bind-address参数,并将其值从127.0.0.1(仅限本地连接)改为0.0.0.0(允许所有IP地址连接)或特定的服务器IP地址。
例如:
bind-address = 0.0.0.0
更改后,保存文件并重启MySQL服务使更改生效。

对于Ubuntu或Debian系统,可以使用以下命令重启MySQL:
sudo systemctl restart mysql


对于CentOS、Fedora或其他使用System V的系统,可以尝试:
sudo service mysqld restart


步骤 2: 授权远程访问
登录到你的MySQL服务器:

mysql -u 用户 -p密码


然后,为需要远程访问数据库的用户授予权限。例如,如果想要给用户myuser从任何主机访问mydatabase数据库的权限,可以运行以下命令:
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword';

如果你想限制只能从特定IP访问,将'%'替换为该IP地址:
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'specific_ip_address' IDENTIFIED BY 'mypassword';
执行完上述命令后,别忘了刷新权限:
FLUSH PRIVILEGES;

步骤 3: 配置防火墙规则


确保你的服务器防火墙允许外部连接到MySQL使用的端口(默认是3306)。根据你使用的防火墙软件,配置规则以开放该端口。例如,使用ufw(Uncomplicated Firewall)在Ubuntu上开放3306端口:
sudo ufw allow 3306/tcp


注意事项
远程访问MySQL会带来安全风险,确保采取适当的安全措施,如使用强密码和限制可访问的IP范围。
考虑使用SSL加密客户端与服务器之间的通信,尤其是在公网环境下。

四、mysql库介绍和管理

在MySQL中,“数据库”是指一组相关的数据表的集合,每个表由行(记录)和列(字段)组成。这些表用于存储特定类型的数据。例如,一个电子商务平台可能有一个名为customers的表来存储客户信息,另一个名为orders的表来存储订单信息。

SQL语句主要可以划分为以下3个类别。

 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括create(创建)、drop(删除)、alter(修改)等。

DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括insert、delete、update和select等。

DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括grant(授权)、revoke(撤销)等。

创建删除数据库

方法一:(不建议使用)

1.数据库的建立 原因就是一个目录是一个数据库 [root@jin~]# mkdir /var/lib/mysql/hello [root@jin~]# chown mysql.mysql /var/lib/mysql/hello/

2.数据库的删除

[root@jin~]# rm -rf /var/lib/mysql/hello

3.数据库的改名

[root@jin ~]# mv /var/lib/mysql/hello /var/lib/mysql/today

示例 RENAME DATABASE db_name TO new_db_name 这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。 据说有可能丢失数据。还是不要用的好。

带出导出导入示例: mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.SQL

mysql -uxxxx -pxxxx -h xxxx -e “CREATE DATABASE new_db_name”

mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.SQL

mysql -uxxxx -pxxxx -h xxxx -e “DROP DATABASE db_name”

4.查看数据库

[root@jin~]# ls /var/lib/mysql/ mysql today vfast 目录

mysql > show databases;

方法二:数据库语句

1.数据库的建立

mysql> create database vfast; Query OK, 1 row affected (0.00 sec)

2.进入某个库

mysql> use vfast;

3.数据库的删除

mysql> drop database vfast; Query OK, 0 rows affected (0.00 sec)

4.查看数据库

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql | | today |

+--------------------+

3 rows in set (0.00 sec)

########create table order 库 -----表 ----列(字段)---记录 ----数据

进入数据库 help contents; 获取帮助目录列表 help 命令; 打印列表里命令的所有操作帮助

《数据类型》:

char 字符串 空间预先分配

varchar 字符串(空间占用更合理,每次存取数据都用CPU计算,所以更耗CPU) 空间后分配

int 整形 一个整数,支持 -2147493648到2147493647 bigint 大数据整形 一个大整数,支持 -9223372036854775808到9223372036854775807

float 浮点型(小数点) 一个小的菜单精度浮点数。支持 -3.402823466E+38到-1.175494351E-38

date 年月日

time 时分秒

datetime 存储年月日时分秒

blob 存储二进制

text 存储文本

enum 单选

set 多选

timestamp 自动插入当天前时间 default current_timestamp

mysql表数据管理

create table shaonianban (id int(3),name char(20),nianling int(3));

更改id为自动增长: alter table shaonianban modify id int(3) not null auto_increment primary key;

批量插入表数据: insert into shaonianban (name,nianling,shengao) values ("lisi",20,170),("wangwu",19,175),("maliu",30,160),("xiaozhang",16,160);

添加表数据:

1.查看数据 mysql> select name,shengao from shaonianban;

select name,id from shaonianban where nianling<18;

#select <查什么字段> from <从个表哪查> where <条件>;

2.插入数据 mysql> insert into shaonianban (name,nianling,shengao) values ("zhangsan",25,180); or mysql> insert into shaonianban (name,nianling,shengao) values("lisi",20,170),("wangwu",18,160),("maliu",15,160),("xiaoming",38,175);

#insert into <插入那个表> <表里的那些字段> values <对应字段的值>

3.更新数据 update shaonianban set nianling=18 where name="maliu"; #update 那个表 set 修改那个字段 where 给个条件;

4.删除数据 insert into shaonianban (name,nianling,shengao)

values("zhangsan1",25,188);

delete from shaonianban where id=6 and name="zhangsan1" and nianling=25;

#delete from <那个表> where <条件 and 条件 ....>;

#删除条件越全越精准

批量从文件中添加的方法

向表中导入数据 load data infile '/etc/passwd' into table passwd fields terminated by ':';

如果要导入的数据有多列,但是默认情况下mysql认为列与列的分隔式用空白,如果不是空白如‘,’即就要加上fields terminated by '*' *代表分隔符

EXAMPLES 导入/etc/passwd文件

###建库

mysql>create database tianda;

###创建表字段

mysql> create table tianda.passwd ( NAME char(15), PASSWORD char(50), UID int(5), GID int(5), MIAOSHU varchar(100), HOME varchar(100), SHELL varchar(100)) charset=utf8;

###导入

mysql> load data infile '/etc/passwd' into table passwd fields terminated by ':';

如报错请修改my.cnf : secure-file-priv=

###查看

mysql>select * from passwd \G ;

对比一下:

cat /etc/passwd | wc -l

############ 从表中导出数据

《从表中导出数据》:

select * from passwd into outfile '/tmp/passwd.sql';

or

select * from passwd into outfile '/tmp/passwd.sql' fields terminated by ',';

需要注意的是目标文件目录(/tmp)一定要有mysql用户写权限,该文件passwd.sql一定不存在

#Myisam和Innodb引擎区别(重要)

MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

事务

事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写,下面以“银行转帐”为例来分别说明一下它们的含义:

原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。

一致性:在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。

隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。

持续性:事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。

你可能感兴趣的:(mysql,数据库)