神甫 发表于 2018-10-3 11:45:33

mysql(待整理)

  mysql的主要目录结构:
  /var/lib/mysql/ 数据库文件夹
  /usr/share/mysql mysql.server命令和配置文件
  /usr/bin mysqladmin,mysqldump等等命令
  /etc/rc.d/init.d/ 启动脚本目录
  mysql的安装
  1.编译安装:
  假设安装包位置在/home下
  #tar -zxvf mysql-xxxxx
  #./confinguer
  #make && install
  #useradd -g mysql mysql 添加一个账号mysql和组mysql
  #cd xxxx/mysql
  #scripts/mysql_install_db--user=mysql 初始化数据库。
  #chown -R root . 更改xxx/mysql/下的权限
  #chown -R mysql date 更改xxx/mysql/下的权限
  #chgrp -R mysql . 更改xxx/mysql/下的权限
  2.#yum install mysql-xxxx
  3.#rpm -ivh mysql-xxxx --nodeps --nodeps 表示忽略依赖关系
  安装完成后使用
  #netstat -altn 查看3306端口开放说明安装成功。
  修改登陆密码:
  默认mysql是没有密码的。
  #/usr/bin/mysqladmin -u USERNAME -p OLDPASSWD password NEWPASSWD
  启动和停止:
  #/etc/init.d/mysql start 启动
  #/etc/init.d/mysql restart 重新启动
  #/usr/bin/mysqladmin -u root -p shutdown停止。
  或者用:
  #mysqladmin -u USERNAME -p PASSWORD start|shutdown|restart
  实现自动启动:
  #/sbin/chkconfig --list 察看mysql是否在自动启动列表中
  #/sbin/chkconfig --add mysql 把MySQL添加到你系统的启动服务组里面去
  #/sbin/chkconfig --del mysql 把MySQL从启动服务组里面删除
  登陆退出mysql
  #mysql -u USERNAME -p PASSWORD
  #/mysql/bin/mysqld_safe --user=mysql 以后台方式用mysql的账号启动。
  mysql>quit退出mysql
  mysql的配置:
  #cp /usr/share/mysql/my-medium.cnf /etc/my.cnf 修改my.cnf文件来修改mysql的全局设置。
  #vim /etc/my.cnf
  innodb_flush_log_at_trx_commit=0 将my.cnf文件中的innodb_flush_log_at_trx_commit设成0来优化。
  
  lower_case_table_names=1后添加添加lower_case_table_names设成1来不区分表名的大小写。
  更改mysql数据库储存位置:
  默认是储存在/var/lib/mysql下的。
  假如要把目录移到/home/data。
  #mkdir /home/date
  #mysqladmin -u USERNAME -p PASSWORD shutdown
  #mv /var/lib/mysql /home/data/
  #vim /etc/my.cnf
  socket =/home/data/mysql/mysql.sock
  #vim /etc/rc.d/initd/mysql
  datadir=/home/data/mysql
  #mysqladmin restart
  设置字符集
  MySQL的默认编码是Latin1,不支持中文,要支持需要把数据库的默认编码修改为gbk或者utf8。
  1.#bin/mysqladmin -u root shutdown中止MySQL服务
  2.#vim /etc/my.cnf 修改配置文件
  
  default-character-set=utf8 默认编码是utf-8
  
  default-character-set=utf8
  3.#……/bin/mysqld_safe 重新启动mysql。
  查询字符集:show variables like '%set%';
  增加MySQL用户

  #grant on DB_NAME.* to USERNAME@HOSTNAME>  本机的话HOSTNAME填成localhost,'%'是任意主机。
  例如:

  grant select,insert,update,delete on *.* to user_1@'%'>
  grant all on *.* to user_1@'localhost'>  远程访问:

  1.#grant all privileges on *.* to USERNAME@HOSTNAME>  例如:

  #grant all privileges on *.* to xoops_root@'%'>  允许xoops_root用户可以从任意机器上登入MySQL。
  2.编辑 /etc/mysql/my.cnf
  #vim /etc/mysql/my.cnf
  # skip-networking 注释掉此处。

  #grant all on *.* to 'root'@'ip'>  使用root密码是password访问mysql
  备份与恢复
  1.备份:
  #cd /val/lib/mysql
  #mysqldump -u root -p --opt aaa > back_aaa
  2.恢复:
  #mysql -u root -p ccc < back_aaa
  用户变量:
  /USERNAME/.bash_profile 储存着用户变量。
  #vim .bash_profile
  PATH= :::/home/mysql/bin/ 添加mysql的路径。
  #env 查看当前环境变量。
  /etc/.bash_profile 系统环境变量。
  常用的命令:
  都是以;结尾。
  mysql>show database; 显示数据库。
  mysql>use DB_NAME; 进入名为DB_NAME的数据库。
  mysql>show tables; 显示当前数据库中表
  mysql>decrisb TAB_NAME;显示TAB_NAME这张表的结构。
  mysql>select * from TAB_NAME; 查看名为TAB_NAME表中的信息。
  mysql>create database DB_NAME; 新建一个名为DB_NAME的数据库。
  mysql>create table TAB_NAME(VALUE1,VALUE2,VALUE3 primary key,……); 新建一个名为TAB_NAME的表,内容有VALEUE1等等,并且VALUE3为主键(primary key)。
  mysql>insert into TAB_NAME values('VALUE1
  ','VALUE2'',……) 插入数据。
  mysql>update TAB_NAME set VALUE1='VALUES' where VALUE2='VALUES' 将VALUE2所在行的VALUE1的值进行修改。
  mysql>delete from TAB_NAME where VAULE1='VALUES' 将TAB_NAME中VALUE1所在的记录条目删除。
  mysql>drop database DB_NAME 删除名为DB_NAME的数据库。
  mysql>drop table TAB_NAME 删除名为TAB_NAME的表。
  mysql的基本配置:
  环境变量的设置:
  计算机右键-->属性-->系统高级设置-->编辑环境变量,在PATH添加mysql的安装路径,并用;分隔开。
  例如mysql的安装路径为:c:\program files\mysql\bin,则在PATH中将此路径添加。
  mysql的启动关闭:
  cmd下:
  net start|stop MYSQLNAME
  services.msc,打开服务管理器
  找到名称为MYSQLNAME的服务进行启动和关闭以及其他操作。
  连接mysql服务器
  mysql的端口默认是3306。默认用户是root
  mysql -h HOSTNAME -u USERNAME -p PASSWORD
  本机连接时,主机名使用localhost。
  例如:
  mysql -h localhost -u root -p toor
  mysql -h 192.168.1.100 -u root -p toor
  查看mysql的基本信息:
  mysqlshow DBNAME ;查看DBNAME的基本信息
  mysql>show databases ;查看所有数据库
  mysql>use DBNAME ;使用DBNAME的数据库
  mysql>show tables; 查看表
  mysql>show warnings 查看警告信息
  mysql>desc DBNAME 查看表的结构
  mysql>select version(); 查看版本
  mysql>select current_date; 查看日期
  mysql>select now(); 查看时间
  mysql>select user(); 查看用户
  mysql>select database(); 查看当前数据库
  mysql>show status 查看运行状态
  mysql>show dngines\G; 查看当前所使用的存储引擎。
  mysql>show variables like ‘%storage%’; 查看存储引擎。
  mysql>show grants for ‘USERNAME@HOSTNAME’; 查看某个用户的权限
  mysql的目录结构;
  bin 客户端程序和mysql的服务器程序等等
  %PROGRAMDATA%\MySQL\MySQL Server VERSION\ 日志文件,数据库
  include 头文件
  lib 库文件
  share 错误信息 ,字符集设置文件,安装脚本,例子数据库等等
  data 数据文件
  doc 文档
  notifier工具
  mysql工具
  mysql
  命令行工具
  使用前需要配置mysql,否则远程访问默认是关闭的。
  mysql -h localhost -u root -p toor
  mysql>use mysql
  mysql>desc user
  mysql>select host,user,password from user
  mysql>update user set host =’% ’ where host=’localhost’
  mysql>flush priviages
  navicat
  轻量级
  mysql-front
  轻量级
  phpmyadmin
  下载xampp,打开xampp的控制台xampp-control.exe,启动apache,并进行配置。
  然后将phpmyadmin目录内的内容全部复制到\xampp\htdosc内。编辑config.inc.php,在其中添加mysql服务器的地址。
  同时启动php的高级服务,取消注释。
http://blog.51cto.com/e/u261/themes/default/images/spacer.gif
  然后重新启动apache,点击配置。
  mysql workbench
  mysql官方工具
  mysql的存储引擎
  存储引擎
  mysql的核心组件,用来处理查询语句,InnoDB是最常用的存储引擎。在创建表的时候,使用 ENGINE=ENGTYPE 可以指定要用的引擎。
  1.InnoDB
  在\mysql\my.ini中有innodb_file_per_table选项,如果此选项为1,则为启用状态,每一个表和索引都将生成一个独立的文件。0为关闭,表和索引将储存在系统表空间内。默认情况下是启用的。
  DBNAME.frm 表格式
  DBNAME.ibd 数据
  2.MyISAM
  在web,数据仓储中常用,拥有较高的插入,查询速度,但不支持事务。
  DBNAME.frm 表格式
  DBNAME.MYD 数组
  DBNAME.MYI 索引
  3.MEMORY
  创建一个特殊属性的表存储在内存中,数据安全性不高,访问快速,延迟低,用于临时操作和只读操作。
  4.CSV
  使用文本文件类型储存数据。数据使用逗号隔开,数据内容必须是NOT NULL属性的。
  DBNAME.frm 表格式
  DBNAME.CSM
  DBNAME.CSV 数据
  5.ARCHIVE
  储存数据量大,数据本身非常小的表格。只支持INSERT和SELECT,不支持DELETE和REPLACE,UPDSTE,同时支持ORDER BY,BLOB。
  DBNAME.frm 表格式
  DBNAME.ARZ 数据
  6.MERGE
  DBNAME.frm 表格式
  DBNAME.MRG 数据
  设置存储引擎:
  CREATE TABLE TABNAME (VAR1,VAR2,……) ENGINE=ENGTYPPE;
  默认情况下是使用InnoDB。
  1.当server启动时,使用--default-storage-engine参数。
  2.编辑配置文件my.ini(Linux中是my.cnf),找到其中的default-storage-engine选项。
  3.使用SET default_storage_engine=ENGTYPE:,在当前的的session中设定。
  数据类型和计算符:
  数值类型:
  整数:
  tinyint 1字节
  smallint 2字节
  mediumint 3字节
  int(integer) 4字节
  bigint 8字节
  小数:
  float 4字节
  double 8字节
  decimal
  所有的小数都可以用(M,N)M表示精度,N表示小数的位数。
  例如:
  create table test
  {
  id int(11), #指定显示宽度,并不是长度。
  name varchar(20),
  salary float
  }
  日期/时间类型:
  类型名称
  日期格式
  储存字节
  YEAR
  YYYY
  1字节
  TIME
  HH:MM:SS
  3字节
  DATE
  YYYY-MM-DD
  3字节
  DATETIME
  YYYY-MM-DD HH:MM:SS
  4字节
  TIMESTAMP
  YYYY-MM-DD HH:MM:SS
  8字节
  字符串类型:
  char varchar binary varbinary blob txit enum set
  char是固定长度字符,varchar是可变长度字符。char会自动删除插入数据的尾部空格,而varchar不会。
  例如:
http://blog.51cto.com/e/u261/themes/default/images/spacer.gif
  运算符:
  算数运算符:
  + ,-,*,/, %
  比较运算符:
  > ,=, use mysql
  mysql>update user set user=”” where host=’%’; 将主机名为%的对应的条目的user值改为空,这样就变成了@%,即任意账号都能远程访问数据库。
  mysql>flush privileges;
  创建账号:
  账号是在mysql数据库下的user表中。
  mysql>use mysql
  mysql>create user USERNAME@HOSTNAME identified by ‘PASSWORD’;
  mysql>flush privileges;
  权限系统:
  主要功能是认证用户,对数据有一定的权限,额外的功能,管理的权限。
  局限性:
  1.不能显性的指定一个账户的拒绝权限,即只能定义白名单。
  2.密码是全局分配的,不能够单独给指定的数据库,表分配密码。
  权限信息是储存在mysql数据库中。
  认证阶段:
  1.认证账号和用户名。
  2.认证账号的权限。
  权限分类:
  1.administrative privileges
  允许用户操作mysql服务器
  2.database privileges
  数据库的权限
  3.privileges for database objects
  表,索引,视图
  权限信息储存在mysql数据库下的user,db,tables_priv,columns_priv,procs_priv。
  user:配置用户账号,全局权限,其他非权限的。
  db:数据库级别的权限。
  host:已作废,从mysql5.6.7开始就不再创建此表了。
  tables_priv:表级别的权限。
  columns_priv:列级别的权限。
  procs_priv:储存过程和函数相关的权限。
  proxies_priv 代理用户权限。
  权限的修改:
  GRANT 设置权限
  mysql>grant PRIV on DBNAME.TABNAME to USERNAME;
  REVOKE 取消权限
  例如:
  mysql>grant select on world.cityto test@’192.168.1.%’; 给test用户赋予查询的权限,对象是world数据库下的city表。
  账号过期时间:
  在mysql5.6.6中新增了password_expried列,定义用户密码过期的选项,默认值是N,但是可以通过ALTER USER来设置成Y。
  例如:
  alter user ‘root@localhost’ password exprie; 将值设定成Y。
  update user set password_pexried =’N’ where host=’localhost’; 将值设定为N。
  set password for ‘root@localhost’ = password (‘melody’); 将值设定为N。
  访问控制认证:
  认证分为2个step。
  1.connection verification
  验证用户信息:
  1.连接的主机名。
  2.mysql的用户名。
  验证密码;
  验证都是通过mysql.userz表中的user,host,password 3个字段中的内容。
  账户匹配规则:
  1.当服务启动时将user表读入内存中并排序。
  2.当用户连接时,从排序的表总匹配记录。
  3.有多条可以匹配时,匹配排序后的符合条件的第一条。
  查看匹配条目时,使用SELECT CURRENT_USER();查看所匹配的条件。
  2.request verification
  当step1完成后,将验证相关的权限信息。
  user表:全局权限。
  db表:database级别的的权限
  user字段:空表示匹配匿名用户,不能使用通配符。
  通配符可以使用在host和db字段。特别的字符使用\转义字符来进行转义。
  host字段:% 和空 代表任意主机。
  db字段:%和空,代表任意数据库。
  table_priv表
  columns_priv表
  procs_priv表
  %和_可以用在host字段上,%或者空表示任意主机。
  db、table_name.column_name,routine_name字段是不能出现%或者是空的。
  权限生效时间:
  当mysql启动时,读取所有的权限表读进内存。
  当对权限表使用了例如GRANT,REVOKE,SET PASSWORD,RENAME USER命令时,服务将立即记录这些修改并且重新加载这些权限表读进内存。
  当对权限表使用了例如INSERT,UPDATE,DELETE这些命令时,不会及时生效,直到服务器重启或者是重新加载这些权限表。
  重载权限表:
  mysql>FLUSH PRIVILEGES
  cmd下:
  mysqladmin flush_privileges
  mysqladmin reload
  权限表重载会对每一个当前存在的的会话接造成影响:
  1.客户端下次登陆的时候,表和字段的权限会发生改变。
  2.客户端下次登录后时候执行use DBNAME的时候,数据库权限会发生改变。
  3.全局权限和密码不会对当前会话改变,当有后续会话的时候会发生改变。
  如果服务器启动的时候加上了--skip-grant-tables 选项,那么将不会把权限表读至内存中而且不会对账户访问权限做限制,任何账户都能登陆并最任何操作。这样是不安全的。
  例如:
  忘记数据库root的密码后,可以打开mysql配置文件,在项目下添加skip-grant-tables,并重启mysql服务。
  用户管理:
  创建用户:
  1.CERATE USER or GRANT ,自动的更改权限表的内容。推荐这么做。
  mysql>create user ‘USERNAME’@’HOSTNAME’ identified by ‘PASSWORD’; 创建用户
  mysql>grant PRIV|ALL on DBNAME.TABLENAME to ‘USERNAME’@’HOSTNAME’; 给账号分配权限。
  mysql>drop user ‘USERNAME’@’HOSTNAME’; 删除用户。
  2.修改mysql数据库下的权限表,手工添加。
  设定账户资源:
  max_user_connections 用户的并发数。是全局的权限。
  1.每小时查询的次数
  2.每小时更新的次数
  3.每小时连接服务器的次数
  4.单个账号的连接数。
  例如:
  mysql>create user ‘test’@’localhost’ identified by ‘test’;
  mysql>grant all on customer.* to ‘test’@’localhost’
  with max_queries_per_hour 20 每小时可以查询的次数
  max_update_per_hour 10 每小时可以的更新次数
  max_connections_per_hour 5 每小时可以建立连接的连接数
  max_user_connections 2; 单个用户可以同时建立的连接数
  mysql>grant usage on *.* to ‘test’@’localhost’ with max_queries_per_hour 2;
  资源的统计是以账号来统计,不是以连接的客户端来计算的。
  想取消全部权限可以使用FLUSH_USER_RESOURCES命令来清零。
  设定账户密码:
  除了在创建账户的时候设置,可以以使用以下命令设置。
  mysql>set password for ‘USERNMAE’@’HOSTNAME’ = password (‘PASSWORD’);
  更改当前已登陆的非匿名账户的密码,可以使用如下命令:
  mysql>set password = password(‘PASSWORD’);
  mysql>grant usage on *.* to ‘USERNAME’@’HOSTNAME’ identified by ‘PASSWORD’; 这是通过grant usage在全局级别修改密码,是不会影响到当前回话的权限的。
  也可以通过命令行的方式来更改密码:
  >mysqladmin -h HOSTNAME -u USERNAME -p password ‘PASSWORD’; 此时需要输入旧密码才能更改为新密码。
  密码过期:

页: [1]
查看完整版本: mysql(待整理)