MyException - 我的异常网
当前位置:我的异常网» 数据库 » Mysql数据库的二进制装配和基础入门操作

Mysql数据库的二进制装配和基础入门操作

www.MyException.Cn  网友分享于:2013-11-16  浏览:0次
Mysql数据库的二进制安装和基础入门操作

前言:Mysql数据库,知识非常的多,要想学精学通这块知识,估计也要花费和学linux一样的精力和时间。小编也是只会些毛皮,给大家分享一下~

一、MySQL安装

(1)安装方式:

1 、程序包yum安装,下实验一

  优点:安装快,简单

  缺点:定死了各个文件的地方,太死板

2 、二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用(推荐),下实验二

3 、源代码:编译安装,太麻烦

 

(2)mysql 的程序组成:

Client:

  mysql :CLI 交互式客户端程序

  mysqldump, mysqladmin...

Server:

  mysqld_safe mysql的备份

  mysqld

  mysqld_multi :多实例

服务器监听的两种socket 地址:

  ip socket: 监听在tcp 的3306 端口,支持远程通信

  unix sock: 监听在sock 文件上(/tmp/mysql.sock,/var/lib/mysql/mysql.sock) ,仅支持本机通信

 

实验一:yum源安装MySQL和开启设置服务

1、打开官方网站,上边有各种版本的yum源,找到自己想要的版本设置yum源

https://downloads.mariadb.org/mariadb/repositories/

若上不了网,也可以使用自己光盘里的老版本

 

2、若不用自己的光盘老版本,要配置yum源,这里我选了10.2的版本

vim /etc/yum.repos.d/along.repo

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.2/centos7-amd64

gpgcheck=0

 

若有其他yum源,加一个enabled=0 先临时关闭,yum clean all 清除缓存,注意:官方给的yum源安装的Maria没有安装相依赖的包,还需自己安装相依赖的包

 

3、yum安装和开启服务

这里,就直接安装光盘里的老版本了

yum -y install mariadb-server

systemctl start mariadb 开启服务

  ss -nutl 打开了3306的tcp端口

  查询端口对应的进程信息 lsof -i :3306 或 netstat -tnlp | grep 3306

注意:开启服务后,会多一个mysql的用户,它的家目录:存放数据库,相当于数据库中的每个表

mysql用户是安装包时,执行了个脚本,创建了mysql用户,提示我们要是二进制安装需创建用户

rpm -q --scripts mariadb-server 可以查看这个脚本

 

 

4、mysql 运行

发现是root,能查能删,很不安全

还能mysql xxx 匿名登录

 

5、运行安全脚本

/usr/bin/mysql_secure_installation

 

实验二:二进制安装mariadb和开启设置服务

注意:安装之前要确保自己系统上没有mariadb服务,有老版本可以先卸掉,删除mysql用户

1、去官网下载自己想要的版本 http://mariadb.org

rpm -qi mariadb 可以查询官网

上传,解包解压缩

rz,tar xvf mariadb-10.2.8-linux-x86_64.tar.gz -C /usr/local/

(不像编译安装一样,解包可以放在任何目录,这个二进制安装必须指定在这个目录)

 

2、cd /usr/local/ 发现mariadb的目录名字不符合要求

ln -s mariadb-10.2.8-linux-x86_64/ mysql 创建软连接也可以改名

 

3、创建mysql用户

useradd -d /app/mysqldb -r -m -s /sbin/nologin mysql

 

4、创建修改配置文件

ls support-files/ 包里自带的有配置文件,但地方不对,要放在/etc/mysql/my.cnf

mkdir /etc/mysql

cp support-files/my-huge.cnf /etc/mysql/my.cnf 我们演示一个大的

vim /etc/mysql/my.cnf 修改配置文件

[mysqld]

datadir = /app/mysqldb //指定总目录,必须的

innodb_file_per_table = on //让每一个表数据库都是一个文件,方便管理

skip_name_resolve = on //忽略名字的反向解析,加快速度

 

5、执行脚本,创建系统数据库

cd /usr/local/mysql 一定要在这个目录下执行脚本,因为脚本写死了

./scripts/mysql_install_db --user=mysql --datadir=/app/mysqldb 执行脚本

完成后就会在/app/mysqldb/ 生成mysql系统数据库

 

6、把服务脚本复制过去

cp support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld 设置服务在哪个运行级别,在哪个运行级别开启服务

chkconfig --list mysqld

service mysqld start 失败,看失败原因:缺少日志文件,日志文件须有读写权限

 

7、创建配置文件

mkdir /var/log/mariadb/

touch /var/log/mariadb/mariadb.log

chown mysql /var/log/mariadb/mariadb.log

service mysqld start 开启成功

设置PATH:

vim /etc/profile.d/mysql.sh

PATH=/usr/local/mysql/bin:$PATH

. /etc/profile.d/mysql.sh

 

8、运行安全初始化脚本,同上实验

mysql_secure_installation

 

 

二、mysql基础入门操作

1、命令行交互式命令:mysql

mysql 命令的选项:

  -uUSERNAME: 用户名;默认为root

  -hHOST: 服务器主机; 默认为localhost

  -pPASSWORD :用户的密码; 建议使用-p, 默认为空密码

 

2、mysql中一些的名词

数据库:database

表:table

索引:index

引擎:engines

列、字段:column

\G:竖着显示

 

3、SQL 语句:(4大类)

DDL: Data Defination Language 数据定义语言,修改表结构

  CREATE(创建), DROP(删除), ALTER(修改表结构)

DML: Data Manipulation Language 数据操作语言修改表里的数据

  INSERT, DELETE, UPDATE(更新数据)

DQL :Data Query Language 数据的查询语言

  SELECT 用法多,非常灵活

DCL :Data Control Language 数据控制语言,授权限

  GRANT, REVOKE(取消授权)

 

、对数据库的操作

1、查看数据库:show databases;

查看某个数据库中的表:show tables [from database_name] 如果已经在这个库下,不用加from

数据库有information_schema 库,这个库是只读库,只有root特殊权限的用户登录才能看到,不能drop删除

数据库有#mysql50#.mozilla 类似的库的处理方法,因为mysql家目录下有个隐藏文件导致,不能删除

把这些隐藏文件移走就好了

 

2、创建数据库:

CREATE DATABASE(数据库) [IF NOT EXISTS](如果不存在,创建)'DB_NAME'; 创建成功一个,会生成一个表数据库文件

  CHARACTER SET 'character set name' 设置字符集,不推荐设置,不建议调

  COLLATE 'collate name' 设置排序规则,不推荐设置

注意:数据库对象的命名规则

必须以字母开头

可包括数字和三个特殊字符(# _ $)

不要使用MySQL 的保留字

同一Schema(数据库) 下的对象不能同名

 

3、删除数据库

DROP DATABASE [IF EXISTS] 'DB_NAME'; 删除成功,会删除对应的表数据库文件

查看支持所有字符集:SHOW CHARACTER SET; 不需要改

查看支持所有排序规则:SHOW COLLATION; 不需要改

4、获取命令使用帮助:mysql>help create database;

 

例:create database testdb;  创建testdb数据库

drop database testdb;  删除testdb数据库

 

四、创建删除表

1、查看数据库中所有的表:show tables from base_name;

 查看表结构desc tbl_name;

 

2、创建表,依照范式

CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1 修饰符, col2 type2 修饰符, ...)

字段信息:

• col type1 指定类型

• PRIMARY KEY(col1,...) ()复合主键

• INDEX(col1, ...) 索引

• UNIQUE KEY(col1, ...) 唯一键

表选项:

• ENGINE [=] engine_name (引擎设置,默认就好)

  SHOW ENGINES; 查看支持的engine 引擎类型

• ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT |COMPACT} 行的格式,默认就好

create table students3 select * [id,name] from students; 也可以创建一个表,完全复制另一个表的结构[或自己选择的结构];复制的表没有约束,如主键

insert into students3 select * from students; 有students3这个表,完全复制另一个表的内容

获取创建表的帮助:mysql> HELP CREATE TABLE;

 

3、删除表: DROP TABLE [IF EXISTS] 'tbl_name';

 

4、例子:

例1:CREATE TABLE testdb.students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR (20) NOT NULL,age tinyint UNSIGNED);

解释:创建testdb库中名为students表;表有3列:id、name、age;id:数据类型int为正、不为空、设为主键;name:数据类型VARCHAR (20)、不为空;age:数据类型tinyint UNSIGNED)

 

例2:create table teachers (id int unsigned not null,name varchar(20) not null,age tinyint unsigned,primary key(id,name));

解释:创建testdb库中名为teachers表;表的复合主键为id和name列;其他和例1一样

例3:create table students3 select *  from students;  创建students3复制students的内容

 

五、DDL语句:修改表结构,尽量不要改表结构,很少用

1、查看表结构:DESC [db_name.]tb_name;

2、修改表结构 alter

ALTER TABLE 'tbl_name'

  字段:

    添加字段:add

      ADD col1 data_type [FIRST加到第一段的后边|AFTER col_name某一段的后边]

    删除字段:drop

    修改字段:change (字段名), modify (字段属性)

    索引:

      添加索引:add

      删除索引: drop

    表选项:

      修改:change

查看帮助:Help ALTER TABLE

 

3、例子:

Help ALTER TABLE 查看帮助

ALTER TABLE students3 RENAME s3; 改表名

ALTER TABLE s3 ADD phone varchar(11) AFTER name; 在s3表的name字段后加一个phone

ALTER TABLE s1 MODIFY phone int; 把phone的数据类型改为int

ALTER TABLE s1 CHANGE COLUMN phone mobile char(11); 把字段phone改名为字段mobile,数据类型为char(11)

ALTER TABLE s1 DROP COLUMN mobile; 删除字段mobile

ALTER TABLE students ADD gender ENUM('m','f') 增加gender字段,为枚举类型,只能是m或f

ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY; 把修改id字段为sid,数据类型为正int、非空、主键

ALTER TABLE students ADD UNIQUE KEY(name); 在name字段加唯一键

ALTER TABLE students ADD INDEX(age); 在age字段加索引

DESC students; 查看这个表

SHOW INDEXES FROM students; 查看索引信息

ALTER TABLE students DROP age;

 

六、DML语句,修改表内容

1、查看

select * from tab_name [WHERE clause [LIMIT [m,]n];] 查看表中的所有内容,Limit m,n 跳过m行,要n行

select id,name,... from tab_name; 查出指定的表中内容

select count(*) from tab_name; 查看表中的记录数量,count()是自带的函数

 

2、修改表内容:

INSERT 添加,插入,下有例子

  INSERT [INTO] tbl_name[(col_name,...)] VALUES(val1,...),(...),... 下例2,3

  分析:① tbl_name后不加(),默认按表结构的列;若加(),前后()内容要对应,顺序可以不按表结构,也可以设null值,但最好不要,

     ② 选项不是数字,都要加'',例:name='along'

insert into tab_name1 select * from tab_name2; 批量导数据,下例4

 

UPDATE: 更新,修改表内容,下有例子

  UPDATE tbl_name SET col1=val1, col2=val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 下例5

 分析:若不加where,直接把所有列都修改了,Limit m,n 跳过m行,要n行

 

DELETE:删除表内容,下有例子

  DELETE FROM tbl_name [WHERE clause] [ORDERBY 'col_name' [DESC]];可先排序再指定删除的行数,下例6

  分析:若不加where,直接把所有列都删除了

TRUNCATE TABLE tbl_name; 清空表,快速清空,删除的时候,不计日志,谨慎使用

 

3、例子

① select * from students limit 3,2;

② insert into students(id,name,age) values(1,'along',18); 添加1行信息

③ insert into students values(2,'xiaoming',19),(3,'xiaohong',20); 添加2,3行信息

④ insert s2 select * from students; 复制students表的信息到s2表中

⑤ update s2 set name='xiaohei',age=30 where id=2; 修改id=2行的内容

⑥ delete from s2 where id=3; 删除s2表的id=3的行

 

七、DQL 语句,select

DQL :SELECT,用法很多

SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n]; 查询表内容信息,上例1

1、字段表示法:

  *: 所有字段

  as :字段别名,若事先做好了表,想要把列的英语改成中文,不用修改,可以直接用别名,下例1

 

2、排序:order by col_name [desc]

  解释:by后指定列,desc反向排序,反向也可以-col_name

  注意:若其中有空值,正向排序空值在第一行,反向排序空值在最后一行,可以order by -col_name desc 即正向排序,有把空值放在最后一行,下例2

 

3、WHERE clause:where 后的选项

操作符:下例3

  >, <, >=, <=, ==, !=

  BETWEEN ... AND ...

  LIKE:模糊匹配,

    % :任意长度的任意字符

    _ :任意单个字符;

  RLIKE :正则表达式模式匹配

  IS NULL ,IS NOT NULL 寻找空值,不能用=,只能用is,所以最好不要有null,不好管理

  IN (val1,val2,…) 离散值显示

条件逻辑操作:

  and ,or ,not

 

例子:

① select id as 学生编号,name 姓名,age 年龄 from students; 设置别名

② select * from students order by -age desc; 按年龄的列正向排序,null在最后

③ select * from students where age>=20; 显示age>=20的

select * from students where age between 18 and 20; 显示18-20的

select * from students where name like 'xiao%'; 显示name是xiao开头的

select * from students where name rlike 'ng$'; 显示name是ng结尾的

select * from s2 where age is null; 显示null值的行

select * from students where age in (18,20,30); 显示age=18,20,30的行

 

 

八、DCL 数据控制语言,授权限

(1)用户账号

1、用户账号:'user'@'host'

  user: 用户名

  host: 允许用户通过哪些主机远程连接mysqld 服务

    IP 、网络地址、主机名、通配符(% 和_)

2、创建用户:

CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

例:create user 'along'@'192.168.30.%' identified by 'centos'; 添加along账号在192.168.30这个网段,可以输centos密码连接

注意:这里的账号和linux的用户不是一个东西

 

3、查看当前等登录的用户:

SELECT user();

4、查看已经添加的用户:

SELECT User,Host,Password FROM mysql.user;

 

5、删除用户:DROP USER 'username'@'host';

示例:drop user'along'@'192.168.30.107';

 

6、更改口令:多用第一种

SET PASSWORD FOR 'user'@'host' = PASSWORD('password');

  分析:password();是调用了自带的函数

  例:set password for 'along'@'192.168.30.%'=password('along');

② UPDATE user SET password=PASSWORD('magedu') WHERE User='root';

  注意:相当于改了user的表,不推荐用,修改表的命令不会马上生效,需执行FLUSH PRIVILEGES 刷新一下生效

③ /usr/local/mysql/bin/mysqladmin -u root –poldpassword password 'newpassword'

注意:仅创建的用户,其所拥有的权限很小,所以我们要进行授权

 

(2)DCL,授权,回收权限

1、授权

GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITHGRANT OPTION]; 授权并创建账号

① priv_type: ALL [PRIVILEGES] 授权类型:

   insert增,delete删 , update改,select查,all所有权限

② db_name.tb_name: 对哪个数据库的哪个表授权:

  *.*: 所有库的所表

  db_name.*: 指定库的所有表

  db_name.tb_name: 指定库的指定表

  db_name.routine_name :指定库的存储过程和函数

例:grant all on test.* to 'along2'@'%' identified by 'centos'; 创建along2用户,允许其在所有主机通过centos密码登录,对test库的所有表有所有权限

 

2、回收授权:

REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host

例:revoke delete on test.* from 'along2'@'%'; 回收along2@'%'用户对test库的所有表的删除权限

 

注意:

① MariaDB 服务进程启动时会读取mysql 库中所有授权表至内存

② GRANT 或REVOKE 等执行权限操作会保存于系统表中,MariaDB 的服务进程通常会自动重读授权表,使之生效

③ 对于不能够或不能及时重读授权表的命令,可手动让MariaDB 的服务进程重读授权表:

mysql> FLUSH PRIVILEGES;

 

好了,关于mysql,小编也只是刚接触,感觉自己还在门外,希望大家一起进步!!!

1楼JieYing
吊的一比;博主很牛逼;回歌一首“”老王小芳“”

文章评论

程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
每天工作4小时的程序员
每天工作4小时的程序员
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员应该关注的一些事儿
程序员应该关注的一些事儿
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
旅行,写作,编程
旅行,写作,编程
编程语言是女人
编程语言是女人
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
我的丈夫是个程序员
我的丈夫是个程序员
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
那些争议最大的编程观点
那些争议最大的编程观点
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
鲜为人知的编程真相
鲜为人知的编程真相
如何成为一名黑客
如何成为一名黑客
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员都该阅读的书
程序员都该阅读的书
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
中美印日四国程序员比较
中美印日四国程序员比较
 程序员的样子
程序员的样子
程序员和编码员之间的区别
程序员和编码员之间的区别
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个调试和排错的小建议
10个调试和排错的小建议
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
一个程序员的时间管理
一个程序员的时间管理
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
Java程序员必看电影
Java程序员必看电影
我是如何打败拖延症的
我是如何打败拖延症的
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员必看的十大电影
程序员必看的十大电影
老程序员的下场
老程序员的下场
代码女神横空出世
代码女神横空出世
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的鄙视链
程序员的鄙视链
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有