mysql简介

随着需求的不断升级,我们存储数据的方式也在不断升级,最开始的文本记录,人工管理。到后来的文件系统,电子化操作。再到现如今的数据库管理阶段。

我们一直在使用数据库:站点搜索资料;登录用户名和密码(银行,邮箱);atm取钱。

数据库系统就是一套对大量信息进行管理的高效方法而已。
数据信息的来源:科研数据,商业账目记录,学生信息,销售业绩,员工信息等等。

数据库的好处:
1、缩短信息记录的录入时间。
2、缩短信息的检索时间。
3、灵活的信息检索顺序。
4、输出格式灵活。
5、信息记录能够被多人使用。
6、信息记录的远程访问和电子传输。

但是,并不是所有的数据都要存放在数据库中。比如采购物品的清单,买一个东西少一样,下次用不一定什么么时候了,就不需要使用数据库。

数据库分为关系型和非关系型数据库。关系型就像我们熟悉的Excel表,非关系型数据库就比较抽象了,主要做缓存,比如Redis。

数据库的构成:
数据库管理系统 DBMS(DataBase Management System)
数据库管理员DBA(DataBase Administrator)

用DBMS来访问DBserver。其实我们常说的MySQL就是数据库管理系统。

我们常见的数据库管理系统软件:ORACLE、SQL Server、DB2、MySQL。

数据库的访问技术我就知道:
JAVA 的 JDBC。不过用的最多的还是封装了JDBC的框架MyBatis,hibernate等等。
Python 的 ODBC。

MySQL的主要分支版本有:percona server,MariaDB这两大分支。
RHEL7使用MariaDB替换原生的MySQL。

回想一下在CentOS中也有一个东西locate,其实locate里也有一个数据库原始文件,locate就是查询那个数据库原始文件来进行文件内容的搜索的(但这个并不是数据库)。所以在使用locate是我都习惯性的更新下数据。

mysql的安装:

法1:源码安装,编译然后安装。
./configure
make
make install
法2:bin包安装,就相当于绿色版。一般解压缩就能用。
法3:直接rpm包安装。

我用的是bin包。比较麻烦。
首先自然是要下载这个bin包了。

在开始之前要先安装这个包。

[root@localhost ~]# yum  install   libaio  libaio-devel  -y

这个是异步IO也是mysql或者oracle所需要的的依赖。

1、首先要解压缩到一个位置。我就选择/usr/local/了。

[root@localhost ~]# tar zxf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

解压之后可以创建一个链接文件,指向mysql解压出来的目录,那个目录名字太长了。

[root@localhost ~]# ln -s /usr/local/mysql-5.7.18-linux-glibc2.5-x86_64/ /usr/local/mysql

2、添加用户,MySQL的运行要用到,mysql用户,mysql用户要在mysql组中,UID,GID为27.

[root@localhost local]# groupadd -g 27 mysql 
[root@localhost local]# useradd -u 27 -g 27 -s /sbin/nologin mysql

3、分配权限,将解压出来的目录的属组和属主都变为mysql

[root@localhost local]# chown -R mysql:mysql mysql-5.7.18-linux-glibc2.5-x86_64/

4、/etc/my.cnf文件,配置文件。

这个之前要先删除CentOS自带的数据库mariadb-libs

[root@localhost ~]# yum erase mariadb-libs -y

然后直接写个这个my.cnf。选项如下。

[client]
port    = 3306
socket  = /tmp/mysql.sock

[mysqld]
user    = mysql
port    = 3306
socket  = /tmp/mysql.sock
pid-file = /data/mysql/run/mysql.pid
datadir = /data/mysql/data
general_log_file        = /data/mysql/log/mysql-access.log
log-error       = /data/mysql/log/mysql-error.log
expire_logs_days        = 3
lower_case_table_names  = 0

skip-external-locking
query_cache_type        = 1
query_cache_size        = 128M
key_buffer_size         = 16M
max_allowed_packet      = 1M
table_open_cache        = 64
sort_buffer_size        = 512K
net_buffer_length       = 8K
read_buffer_size        = 256K
read_rnd_buffer_size    = 512K
myisam_sort_buffer_size = 8M
tmpdir  = /data/mysql/tmp
slave-load-tmpdir       = /data/mysql/tmp
tmp_table_size  = 32M
max_heap_table_size     = 32
max_connections         = 2000

replicate-wild-ignore-table     = mysql.%
replicate-wild-ignore-table     = information_schema.%
replicate-wild-ignore-table     = performance_schema.%

innodb_data_home_dir    = /data/mysql/innodb
innodb_data_file_path   = ibdata1:512M:autoextend
innodb_log_group_home_dir       = /data/mysql/innodb
innodb_log_file_size    = 512M
innodb_log_files_in_group       = 2

relay-log       = /data/mysql/relay-log/slave_relay_bin
relay-log-index = slave_relay_bin.index
log-slave-updates
binlog_format   = row
server-id       =  21
log-bin         = /data/mysql/binlog/binlog
log-bin-index   = binlog.index
innodb_log_buffer_size  = 16M

5、创建目录,并分配权限:

[root@localhost ~]#mkdir /data/mysql/{run,data,tmp,innodb,log,relay-log,binlog,etc} -p

[root@localhost ~]# chown -R mysql:mysql /data/mysql/

6、初始化:

[root@localhost ~]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql

[root@localhost ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup  --datadir=/data/mysql/data 

如果初始化报如下错的话。

[root@localhost ~]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql
2019-11-26T09:52:58.761637Z 0 [Warning] option 'max_heap_table_size': unsigned value 32 adjusted to 16384
2019-11-26T09:52:58.761821Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-11-26T09:52:58.766262Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2019-11-26T09:52:58.766308Z 0 [ERROR] Aborting

检查解压出来的文件创建的data目录结构,文件的权限是否是mysql。如果都没有异常,删除/data/mysql/data/这个目录下的所有文件,然后重新执行初始化命令。

7、启动服务

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql & 

第一次启动服务就报错的话,检查初始化。

8、查看初始密码

[root@localhost /]# grep "root@localhost" /data/mysql/log/mysql-error.log 
2019-11-26T09:54:29.656507Z 1 [Note] A temporary password is generated for root@localhost: *(tTD(9>Baye

//最后那个就是初始密码了,*(tTD(9>Baye。。。。。。

从mysql5.7开始就有初始密码了。

到这里,安装就结束了。

因为是bin包,直接解压缩的,所以在$PATH变量里没有这相关的命令。最好手动添加下,要不然的话每次都要输很长的目录。每次启动服务是都要这样:

[root@localhost /]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf  --user=mysql &

进行如下操作。

[root@mysql-bin ~]# vim /etc/profile
PATH=/usr/local/mysql/bin:$PATH
//就是在这个目录中添加一行
[root@mysql-bin ~]# . /etc/profile
//然后重新加载系统环境配置文件。

然后就可以直接使用mysql命令,不用加前边的目录了。

不过那个初始密码不好记,要修改下。

修改初始密码:
[root@mysql-bin ~]# mysql -u root -p
Enter password: 初始密码   先用初始密码登录再改
mysql> alter user root@'localhost' identified by 'mysql';

PS:也可以直接修改mysql数据库中的user表对应行。

mysql> flush privileges;
mysql> quit
//进入mysql修改密码然后刷新权限列表

[root@mysql-bin ~]# mysql -u root -p
Enter password: 新密码
//再次登陆时就可以使用新密码了。

RPM包安装就要省事的多:

有yum源的话直接安装就好了。

然后启动服务和开机启动。

yum install -y mysql-community-server  && echo "mysql5.7.18 install OK."

systemctl start mysqld
systemctl enable mysqld 

不过RPM设置密码 的时候比较麻烦,因为是正式版本或者说授权的版本,安全策略的级别是很高的。默认的安全级别是MEDIUM中等的。要求长度最少8位,并且最少有1个大写小写字母数字和符号。

安全策略

mysql> show variables like '%password%';
+---------------------------------------+--------+
| Variable_name                         | Value  |
+---------------------------------------+--------+
| default_password_lifetime             | 0      |
| disconnect_on_expired_password        | ON     |
| log_builtin_as_identified_by_password | OFF    |
| mysql_native_password_proxy_users     | OFF    |
| old_passwords                         | 0      |
| report_password                       |        |
| sha256_password_proxy_users           | OFF    |
| validate_password_check_user_name     | OFF    |
| validate_password_dictionary_file     |        |
| validate_password_length              | 8      |	长度
| validate_password_mixed_case_count    | 1      |	最少有1位大写、小写字母
| validate_password_number_count        | 1      |	最少有1位数字
| validate_password_policy              | MEDIUM |	密码的安全策略级别
| validate_password_special_char_count  | 1      |	最少有1位符号
+---------------------------------------+--------+
//查看安全策略。
0 LOW:最低级,只检查密码长度
1 MEDIUM:中级的,长度,复杂度
2 STRONG:最高级,长度,复杂度,数据字典

mysql> set global validate_password_policy=0;  //修改安全策略位LOW

mysql> set global validate_password_length=4;  //修改密码的最大长度:

MySQL的启动

1. bin


/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &


echo "/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &" >> /etc/rc.local
//将这一行内容追加到,rc.local这个文件中,rc.local这个文件会在开机时执行,简单来说就是写到这里的东西开机自启

#/etc/rc.d/rc.local 用于添加开机启动命令
#/etc/rc.local是/etc/rc.d/rc.local的软连接

chmod +x /etc/rc.d/rc.local //要给个执行权限才行,rc.local配置文件中有写。


用 kill 可以关闭mysql服务。

2. rpm

systemctl start  mysqld	
systemctl enable mysqld	
//因为是rpm安装直接启动服务就好了。
默认端口 3306/tcp

netstat -antp | grep mysqld
dba --> mysql(客户端工具) --> mysql-server
		mysql-进程			  mysqld-进程
					进程间通信 mysql.sock 套接字文件

mysql.sock文件一般在tmp目录下租用就是进程间通讯,mysqld是mysql的守护进程,是服务的进程,mysql是数据库的命令进程。这是两个进程,他们之间就是靠mysql.sock进行通信的。

对于系统的基本操作:
show databases;  //查看数据库 类似ls
select user();   //查看用户 类似id
select database();  //查看当前所在数据库  类似pwd
mysql> create database db1;
mysql> drop database db1;
mysql> create database db2 default character set utf8 collate utf8_general_ci;
//在创建数据库时指定字符集编码。

当然也可以直接在配置文件 /etc/mycnf中添加下边这两行,重启mysql,就可以默认生效了,创建数据库时不指定位utf8也是utf8。

原来的数据库默认是拉丁文的字符编码。

[mysqld]

character-set-server = utf8
collation-server = utf8_general_ci


user    = mysql
port    = 3306
socket  = /tmp/mysql.sock
pid-file = /data/mysql/run/mysql.pid

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

mysql> show create database db1;
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| db1      | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> show create database db2;
//查看信息。

Linux中一切都是文件,database也是。

看上边的my.cnf配置文件:
datadir = /data/mysql/data有这样一条。

进到这个目录里
就会发现有自己创建的数据库,是以目录形式存在的。进到这里去,会发现该一个db.opt文件。

[root@localhost gsc1]$ cat db.opt
default-character-set=utf8
default-collation=utf8_general_ci
//这里只有2行,正是数据库的字符集编码。

而且按照配置文件中所说,目录为/data/mysql/data,在这么目录下直接创建目录,然后分配权限,设置属主和属组为mysql,数据库也是能够识别成数据库的。

[root@geili mysql]# pwd
/var/lib/mysql  //这个目录rpm包的/etc/my.cnf配置文件中所写的数据库存放位置。
[root@geili mysql]# mkdir db1   //创建目录
[root@geili mysql]# chmod -R 750 db1    //分配权限
[root@geili mysql]# chown -R mysql:mysql db1/    //设置属主和属组。


进入数据库中查看。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
//确实有db1这个数据库。,并且和create  database  name创建的数据库一样。

数据库中是以表的形式来存储数据的,表在数据库中才可以使用。所以一定要进入某个数据库才能操作表。

进入数据库:

use  数据库名
mysql> create table t1 (id int,name char(10));//创建表要先指定字段。以及字段的数据类型。
mysql> drop table t1;  //删除表
musql>show tales;//查看表
mysql> desc t1;  //查看某个表的信息。
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | YES  |     | NULL    |       |
| name  | char(10) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
    Field	列名
	Type	列的数据类型
	Null	是否允许是空值
	Key		键值
	Default	默认值是什么,没有设置的情况下,是空值
	Extra	其他的参数
mysql> show create table t1;
| t1    | CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL,
  `name` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
	ENGINE=InnoDB	表的默认的存储引擎
	CHARSET=latin1	表的默认的字符集
数据类型:
  1. 数值型
(1)整型
	tinyint		很小整数	127
人的年龄等
	smallint	小整数		32767
游戏的等级等
	mediumint	中型整数	838607
	int			整数		2147483647
	bigint		大整数		2^63
游戏的经验等

(2)浮点型
	float(M,D)	 单精度浮点型 4byte
	double(M,D)  双精度浮点型 8byte

	M整个数的长度,D小数点后保留几位。
	M = D	. 是0
	M > D	M - D = . 前面的整数是几位
  1. 字符型
(1)
	char()		等长字符串
身份证号 电话号码 ...
	char(18) char(12)
	varchar(255)	可变长字符串
名字 地址 邮箱 
(2)
	enum()	单选可能的枚举类型
		enum("元素1","元素2",..)
		人的性别 游戏的职业
	set()	多选可能的枚举类型
		set("元素1","元素2",...)
(3)
	text	保存文本资料
  1. 时间和日期型
(1)date	日期
	1000-01-01 ~ 9999-12-31
	账号的注册时间,员工的入职时间,社保的缴纳时间 ...

(2)time	时间
	-838:00:00 ~ 838:59:59
	

(3)datetime


(4)year
	两位数:0~ 69	2000 ~ 2069
			70 ~ 99	1970 ~ 1999
	四位数:1901 ~ 2155


(5)timestamp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值