mysql数据库基础知识总结(mysql数据库基本知识点总结)
MySQL数据库设置远程访问权限方法小结
MySQL基础知识第一期,如何远程访问MySQL数据库设置权限方法总结,讨论访问单个数据库,全部数据库,指定用户访问,设置访问密码,指定访问主机。
1,设置访问单个数据库权限
复制代码
代码如下:
mysqlgrant
all
privileges
on
test.*
to
'root'@'%';
说明:设置用户名为root,密码为空,可访问数据库test
2,设置访问全部数据库权限
复制代码
代码如下:
mysqlgrant
all
privileges
on
*.*
to
'root'@'%';
说明:设置用户名为root,密码为空,可访问所有数据库*
3,设置指定用户名访问权限
复制代码
代码如下:
mysqlgrant
all
privileges
on
*.*
to
'liuhui'@'%';
说明:设置指定用户名为liuhui,密码为空,可访问所有数据库*
4,设置密码访问权限
复制代码
代码如下:
mysqlgrant
all
privileges
on
*.*
to
'liuhui'@'%'
IDENTIFIED
BY
'liuhui';
说明:设置指定用户名为liuhui,密码为liuhui,可访问所有数据库*
5,设置指定可访问主机权限
复制代码
代码如下:
mysqlgrant
all
privileges
on
*.*
to
'liuhui'@'10.2.1.11';
说明:设置指定用户名为liuhui,可访问所有数据库*,只有10.2.1.11这台机器有权限访问
还可以设置指定访问某个数据库下的某个数据表,请继续关注MySQL基础知识系列。
MySQL数据库的用户帐号管理基础知识
MySQL管理员应该知道怎样通过指定哪些用户可连接到服务器 从哪里进行连接 以及在连接时做什么 来设置MySQL用户账号 MySQL 引入了两个更容易进行这项工作的语句 GRANT 语句创建MySQL用户并指定其权限 REVOKE 语句删除权限 这两个语句充当mysql数据库中的授权表的前端 并提供直接操纵这些表内容的可选择的方法 GRANT 和REVOKE 语句影响以下四个表 授权表 内容user 可连接到服务器的用户和他们拥有的任何全局特权db 数据库级的特权tables _ priv 表级特权c o l um n s _ priv 列级特权还有第五个授权表( host) 但它不受GRANT 或REVOKE的影响 当您为某个用户发布GRANT 语句时 应在user表中为该用户创建一个项 如果该语句指定了所有全局特权(管理权限或用于所有数据库的权限) 则这些指定也被记录在user表中 如果指定了数据库 表或列的权限 它们将记录在db tables_priv 和columns_priv表中 使用GRANT 和REVOKE语句比直接修改授权表更容易 但是 建议您最好通过阅读第 章来补充本章的内容 第 章中详细讨论了授权表 这些表非常重要 作为一位管理员应该了解这些表是怎样在GRANT 和REVOKE 语句级上工作的 本节下面的部分将讨论如何设置MySQL用户的账号和授权 还将介绍如何取消权限以及从授权表中删除全部用户 并且将考虑一个困扰许多新的MySQL管理员的难题 您还要考虑使用mysqlaccess 和mysql_setpermission 脚本 它们是MySQL分发包的组成部分 这些是Perl 的脚本 它们提供了设置用户账号的GRANT 语句的代用品 mysql_setpermission 需要具有DBI 的支持环境 创建新用户和授权GRANT 语句的语法如下 GRANT privileges (columns)ON whatTO user IDENTIFIEDBY password WITH GRANT OPTION要使用该语句 需要填写以下部分 privileges 分配给用户的权限 下表列出了可在GRANT 语句中使用的权限说明符 权限说明符权限允许的操作上表显示的第一组权限说明符适用于数据库 表和列 第二组说明符是管理特权 通常 这些权限的授予相当保守 因为它们会影响服务器的操作(例如 SHUTDOWN 特权不是按每天来分发的权限) 第三组说明符是特殊的 ALL的意思是 所有的权限 而USAGE 的意思是 无权限 ─即创建用户 但不授予任何的权限 columns 权限适用的列 这是可选的 只来设置列专有的权限 如果命名多于一个列 则用逗号分开 what 权限应用的级别 权限可以是全局的(适用于所有数据库和所有的表) 数据库专有的(适用于某个数据库中的所有表) 或表专有的 可以通过指定一个C O L U M N S子句将权限授予特定的列 user 使用权限的用户 它由用户名和主机名组成 在MySQL中 不仅指定谁进行连接 还要指定从哪里连接 它允许您拥有两个带有相同名字的 从不同位置连接的用户 MySQL允许在它们之间进行区别并相互独立地分配权限 MySQL的用户名就是您在连接到服务器时指定的名字 该名字与您的UNIX 注册名或Windows 名的没有必然连系 缺省设置时 客户机程序将使用您注册的名字作为MySQL的用户名(如果您不明确指定一个名字的话) 但这只是一个约定 有关将root作为可以操作一切MySQL的超级用户名也是这样 就是一种约定 您也可以在授权表中将此名修改成nobody 然后作为nobody 用户进行连接 以执行需要超级用户特权的操作 password 分配给该用户的口令 这是可选的 如果您不给新用户指定IDENTIFIEDBY子句 该用户不分配口令(是非安全的) 对于已有的用户 任何指定的口令将替代旧口令 如果不指定新口令 用户的旧口令仍然保持不变 当您确实要使用ID E N T I F I E DBY 时 该口令串应该是直接量 GRANT 将对口令进行编码 当用SET PA S S W O R D语句时 不要使用PASSWORD() 函数 WITH GRANT OPTION 子句是可选的 如果包含该子句 该用户可以将GRANT 语句授予的任何权限授予其他的用户 可以使用该子句将授权的能力授予其他的用户 lishixinzhi/Article/program/MySQL/201311/29478
深入理解MySQL数据库各种锁(总结)
MyISAM和InnoDB存储引擎使用的锁:
封锁粒度小:
由于InnoDB存储引擎支持的是行级别的锁,因此意向锁(因为意向锁是表锁)其实不会阻塞除全表扫以外的任何请求。故表级意向锁与行级锁的兼容性如下所示
参考
参考
行锁的三种算法:
这条语句阻止其他事务插入10和20之间的数字,无论这个数字是否存在。 间隙可以跨越0个,单个或多个索引值。
共享锁:
排他锁:
乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改(天真), 操作数据时不会上锁 ,但是 更新时会判断在此期间有没有别的事务更新这个数据,若被更新过,则失败重试 ;适用于读多写少的场景。
乐观锁的实现方式 有:
关闭自动提交后,我们需要手动开启事务。
上述就实现了悲观锁,悲观锁就是悲观主义者,它会认为我们在事务A中操作数据1的时候,一定会有事务B来修改数据1,所以,在第2步我们将数据查询出来后直接加上排它锁(X)锁,防止别的事务来修改事务1,直到我们commit后,才释放了排它锁。
主从复制主数据库发生宕机,binlog文件还存在吗
存在。MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志 binlog 功能。简单的说,就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制,然后再解析日志并应用到自身,最终实现 从库 的数据和 主库 的数据保持一致。
该怎么学习MySQL数据库,从基础学起的哪种?
如果你没有 MySQL 的基础,建议可以看看以下书籍:
《MySQL 必知必会》:主要讲 SQL 的写法
《深入浅出 MySQL》:比较全面的讲解了 MySQL 的基础知识,也涉及了一些优化。
如果已经对 MySQL 比较熟悉了,可以看下面的书籍:
《高性能 MySQL》:里面讲了很多 MySQL 优化技巧。
《MySQL 技术内幕》:讲解了很多 MySQL 原理,强力推荐给想深入学习 MySQL 的同学。
《MySQL 内核:InnoDB 存储引擎》:想深入研究 MySQL 内核及原理的可以看看。
《MySQL 运维内参》:对 MySQL 源码感兴趣,可以入手。
《MySQL Internals Manual》
《MySQL 5.7 Reference Manual》