zoukankan      html  css  js  c++  java
  • mysql安装及简单操作

    sudo grep mysql_root_passwd /root/env.txt (现在很多人开始使用云主机,登录云主机之后可以根据该命令查看阿里云数据库密码)
    mysql 安装:rpm+rethat6.8(http://www.linuxidc.com/Linux/2016-03/128966.htm)          http://www.mysql.com/downloads/mysql/
    (rpm -ivh)
    rpm -qpl mysql-community-server-version-distribution-arch.rpm
    Configuration file /etc/my.cnf
    Data directory /var/lib/mysql
    mysqld server /usr/sbin
    修改密码;
    mysqladmin -u用户名 -p旧密码 password 新密码
    设置所有ip都可访问该数据库
    mysql -uroot -psawyer(密码前面没有空格)
    use mysql
    select host,password,user from user;
    update user set host='%' where host = '127.0.0.1';
    select host,password,user from user;

    root默认只有本机访问的权限,要通过其他机器访问,必须授权
    GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    flush privileges;
    1.ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
    访问被拒绝,原因就是在删除数据库时(rpm -e mysql*)没有删除干净,需要把/var/lib/mysql的目录全部删除干净,然后再重新安装即可。
    常用命令
    1、显示当前数据库服务器中的数据库列表:
    mysql>show databases;
    注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

    2、显示数据库中的数据表:
    mysql>use 库名;
    mysql>show tables;

    3、显示数据表的结构:
    mysql>describe 表名;

    4、建立数据库:
    mysql>create database 库名;

    5、建立数据表:
    mysql>use 库名;
    mysql>create table 表名 (字段名 varchar(20), 字段名 char(1));

    6、删除数据库:
    mysql>drop database 库名;

    7、删除数据表:
    mysql>drop table 表名;

    8、将表中记录清空:
    mysql>delete from 表名;

    9、显示表中的记录:
    mysql>select * from 表名;

    10、往表中插入记录:
    mysql>insert into 表名 values (”123”,”b”);

    11、更新表中数据:
    mysql>update 表名 set 字段名1='a',字段名2='b' where 字段名3='c';

    12、用文本方式将数据装入数据表中:
    mysql>load data local infile “/root/mysql.txt” into table 表名;

    13、导入.sql文件命令:
    mysql>use 数据库名;
    mysql>source /root/mysql.sql;

    14、命令行修改root密码:
    1.利用shell 登录阿里云服务器,
    执行命令#cd /etc/
    #vi my.cnf
    点击键盘任意按键 进入编辑模式
    在[mysqld]的段中加上一句:skip-grant-tables
    例如:
    [mysqld]
    datadir=/var/lib/mysql
    skip-grant-tables
    点击 ESC按键退出编辑模式
    #:wq! 保存
    重启mysql
    #/etc/init.d/mysqld restart
    然后接下来就是无密码登录了
    #mysql -u root -p
    回车键
    接下来就是
    mysql > use mysql
    mysql>update mysql.user set authentication_string=PASSWORD('新密码') where user='root';
    mysql>flush privileges;

    2.如果忘记了MySQL root密码,可以用以下方法重新设置:
    1.KILL掉系统里的MySQL进程;
    killall -TERM MySQLd
    2.用以下命令启动MySQL,以不检查权限的方式启动;
    safe_MySQLd --skip-grant-tables &
    3.然后用空密码方式使用root用户登录 MySQL;
    MySQL -u root
    4.修改root用户的密码;
    MySQL> update MySQL.user set authentication_string=PASSWORD('新密码') where User='root'; (RROR 1054 (42S22): Unknown column 'password' in 'field list')
    解决;ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE t
    show variables like 'sql_safe%';
    set sql_safe_updates=0; off

    MySQL> flush privileges;
    MySQL> quit
    重新启动MySQL,就可以使用新密码登录了。



    15、显示use的数据库名:
    mysql>select database();

    16、显示当前的user:
    mysql>select user();
    备份数据库

    1.导出整个数据库,导出文件默认是存在当前操作目录下
    # mysqldump -u 用户名 -p 数据库名 > 导出的文件名
    # mysqldump -u user_name -p123456 database_name > outfile_name.sql

    2.导出一个表
    # mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
    # mysqldump -u user_name -p database_name table_name > outfile_name.sql

    3.导出一个数据库结构
    # mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
    -d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

    4.带语言参数导出
    # mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql
    create table user (
    Host char(60) collate utf8_bin NOT NULL default '',
    User char(16) collate utf8_bin NOT NULL default '',
    Password char(41) character set latin1 collate latin1_bin NOT NULL default '',
    Select_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Insert_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Update_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Delete_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Create_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Drop_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Reload_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Shutdown_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Process_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    File_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Grant_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    References_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Index_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Alter_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Show_db_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Super_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Create_tmp_table_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Lock_tables_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Execute_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Repl_slave_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Repl_client_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Create_view_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Show_view_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Create_routine_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Alter_routine_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    Create_user_priv enum('N','Y') character set utf8 NOT NULL default 'N',
    ssl_type enum('','ANY','X509','SPECIFIED') character set utf8 NOT NULL default '',
    ssl_cipher blob NOT NULL,
    x509_issuer blob NOT NULL,
    x509_subject blob NOT NULL,
    max_questions int(11) unsigned NOT NULL default '0',
    max_updates int(11) unsigned NOT NULL default '0',
    max_connections int(11) unsigned NOT NULL default '0',
    max_user_connections int(11) unsigned NOT NULL default '0',
    PRIMARY KEY (Host,User)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges';

    MySQL中的存储引擎:

    1、存储引擎的概念

    2、查看mysql所支持的存储引擎

    3、MySQL中几种常用存储引擎的特点

    4、存储引擎之间的相互转化

    一、存储引擎

    1、存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。
    2、MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力。在MySQL中将这些不同的技术及配套的相关功能称为存储引擎。

    二、MySQL 中查看引擎
    1、show engines; // 查看mysql所支持的存储引擎,以及从中得到mysql默认的存储引擎。
    2、show variables like '% storage_engine'; // 查看mysql 默认的存储引擎
    3、show create table tablename ; // 查看具体某一个表所使用的存储引擎,这个默认存储引擎被修改了!
    4、show table status from database where name="tablename"
    //准确查看某个数据库中的某一表所使用的存储引擎
    三、MySQL中常用的几种存储引擎:innoDB、myisam、memory、BlackHole以及这几个引擎的讲解
    innoDB存储引擎
    (1) innodb存储引擎的mysql表提供了事务,回滚以及系统崩溃修复能力和多版本迸发控制的事务的安全。
    (2)innodb支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空的话怎会进行自动存现有的值开始增值,如果有但是比现在的还大,则就保存这个值。
    (3)innodb存储引擎支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。
    (4)innodb存储引擎最重要的是支持事务,以及事务相关联功能。
    (5)innodb存储引擎支持mvcc的行级锁。
    (6)innodb存储引擎索引使用的是B+Tree
    mvcc类似于Java中的读锁具体介绍可以看这篇文章:http://blog.csdn.NET/chosen0ne/article/details/18093187

    MyISAM存储引擎

    1、MyISAM 这种存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁,主要用于高负载的select。

    2、MyISAM 类型的表支持三种不同的存储结构:静态型、动态型、压缩型。

    (1)静态型:就是定义的表列的大小是固定(即不含有:xblob、xtext、varchar等长度可变的数据类型),这样mysql就会自动使用静态myisam格式。

    使用静态格式的表的性能比较高,因为在维护和访问的时候以预定格式存储数据时需要的开销很低。但是这高性能是有空间换来的,因为在定义的时候是固定的,所以不管列中的值有多大,都会以最大值为准,占据了整个空间。

    (2)动态型:如果列(即使只有一列)定义为动态的(xblob, xtext, varchar等数据类型),这时myisam就自动使用动态型,虽然动态型的表占用了比静态型表较少的空间,但带来了性能的降低,因为如果某个字段的内容发生改变则其位置很可能需要移动,这样就会导致碎片的产生。随着数据变化的怎多,碎片就会增加,数据访问性能就会相应的降低。

    对于因为碎片的原因而降低数据访问性,有两种解决办法:

    @1、尽可能使用静态数据类型

    @2、经常使用optimize table语句,他会整理表的碎片,恢复由于表的更新和删除导致的空间丢失。

    (如果存储引擎不支持 optimize table 则可以转储并重新加载数据,这样也可以减少碎片)

    (3)压缩型:如果在这个数据库中创建的是在整个生命周期内只读的表,则这种情况就是用myisam的压缩型表来减少空间的占用。

    3、MyISAM也是使用B+tree索引但是和Innodb的在具体实现上有些不同。

    MEMORY存储引擎

    (1)memory存储引擎相比前面的一些存储引擎,有点不一样,其使用存储在内从中的数据来创建表,而且所有的数据也都存储在内存中。

    (2)每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件,都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力。

    (3)memory存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果读者希望使用B树型,则在创建的时候可以引用。

    (4)memory存储引擎文件数据都存储在内存中,如果mysqld进程发生异常,重启或关闭机器这些数据都会消失。所以memory存储引擎中的表的生命周期很短,一般只使用一次。

    BlackHole存储引擎(黑洞引擎)

    (1)支持事务,而且支持mvcc的行级锁,主要用于日志记录或同步归档,这个存储引擎除非有特别目的,否则不适合使用!

    四、各存储引擎相互转化

    1、alter table tablename engine = INnodb /MyISAM/Memory // 修改了这个表的存储引擎

    优点:简单,而且适合所有的引擎。

    缺点:(1)、这种转化方式需要大量的时间 和I/O,mysql要执行从旧表 到新表的一行一行的复制所以效率比较低

    (2)、在转化这期间源表加了读锁

    (3)、从一种引擎到另一种引擎做表转化,所有属于原始引擎的专用特性都会丢失,比如从innodb到 myisam 则 innodb的索引会丢失!

    2、使用dump(转储) import(导入)

    优点:使用mysqldump这个工具将修改的数据导出后会以 .sql 的文件保存,你可以对这个文件进行操作,所以你有更多更好的控制, 如修改表名,修改存储引擎等!

    看看导出的一个表:







    以上就是使用mysqldump 导出来的表 即 一个 .sql 文件 你可以按照需求编写这个文件,在将这个文件导入就ok!

    3、第一种方式简便,第二种方式安全,这第三种方式就算是前两种方式的折中吧, create select:

    (1)、 create table newtable like oldtable;

    (2)、alter table newtable engine= innodb/ myisam / memory

    (3)、insert into newtable select * from oldtable;

    如果数据量不大的话这种方式还是挺好的!

    还有更高效的办法就是 增量填充,在填充完每个增量数据块之后提交一次事务,这样就不会导致撤销日志文件过大;

    (1)start transaction

    (2)insert into newtable select * from oldtable where id(主键) between x and y;

    (3) commit

    这样等数据填充之后有了需要的新表,旧表也存在,不需要的haunt可以删除,很方便!
  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/lovenannan/p/9576857.html
Copyright © 2011-2022 走看看