• linux(Debian)下安装与MySql的安装、卸载、配置及使用


    1、安装

    安装:apt-get install mysql-server mysql-client

    MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学习。

      1、数据库目录
      /var/lib/mysql/

      2、配置文件
      /usr/share/mysql(mysql.server命令及配置文件)

      3、相关命令
      /usr/bin(mysqladmin mysqldump等命令)

      4、启动脚本
      /etc/init.d/(启动脚本文件mysql的目录)

    注:

    1、如果执行安装命令后显示找不到一些文件,可以编辑 /etc/apt/sources.list 换一个源(如163的源),update后再试试。

    deb http://mirrors.163.com/debian wheezy main non-free contrib
    deb http://mirrors.163.com/debian wheezy-proposed-updates main contrib non-free
    deb-src http://mirrors.163.com/debian wheezy main non-free contrib
    deb-src http://mirrors.163.com/debian wheezy-proposed-updates main contrib non-free
    
    deb http://mirrors.163.com/debian-security wheezy/updates main contrib non-free 
    deb-src http://mirrors.163.com/debian-security wheezy/updates main contrib non-free
    
    deb http://http.us.debian.org/debian wheezy main contrib non-free
    deb http://non-us.debian.org/debian-non-US wheezy/non-US main contrib non-free
    deb http://security.debian.org wheezy/updates main contrib non-free
    163 源

    2、安装时若报 The following packages have unmet dependencies 之类的一堆依赖缺失错误,可以先执行 sudo ap-get -f install 安装相关依赖。

    2、登录

    "mysql [-h主机ip]  [-P端口] -u用户名 -p密码  [DbName] "    或   "mysql  [-h主机ip] [-P端口] -u用户名 -p  [DbName] "

    远程登录命令示例:

    mysql -h localhost -uxiaozhang -p123

    注:

    1、安装后如果运行mysql命令时报如下错误,有可能是还没启动,先查看 /etc/init.d/mysql status 看看mysql是否已经启动,若没启动则 /etc/init.d/mysqld start即可。当然还有可能是其他原因,解决方法可参看http://www.cnblogs.com/eoiioe/archive/2008/12/28/1363947.html, ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2) 

    2、安装完后默认有个root用户,出于安全考虑MySQL默认限制为只能通过localhost(即127.0.0.1)连接,在其他机子上访问或在本机上-h指定为本机真实IP都访问不了。

    两步解决:

    1. 指定MySQL Server绑定的IP:编辑/etc/mysql/my.cnf 文件(Ubuntu 16 MySQL 5.7 放到了/etc/mysql/mysql.conf.d/mysqld.cnf)里 [mysqld] 下的 bind-address 字段(默认是127.0.0.1),将值改为本机的ip或域名或0.0.0.0(因为机子IP会变所以最好为0.0.0.0或域名),并重启数据库。
    2. 指定允许的访问来源Host:这里以root账户为例,编辑mysql db 下的user表,将root账户的Host限制改为'%',即允许该账户在所有地方登录访问数据库:
      update user set Host ='%' where User='root'; 
      flush privileges; //此句必不可少

    3、启动、停止、重启等

    启动文件mysql在/etc/init.d目录下,执行:/etc/init.d/mysql start|stop|restart|reload|force-reload|status

    关闭/etc/init.d/mysql stop 或直接 mysqladmin -u用户名 -p密码 shutdown

    4、修改密码

    (网上有说借助mysqladmin的方法:先 mysqladmin -u USER -p password NEWPASSWORD ,提示输入旧密码,输入完后即可。但按之操作后不行,一直提示Access Denied,实际上此方法并没有把所有root用户密码均修改。另寻它法)

    分为有root权限和忘记root密码两种:

    • 有root权限:先用root账号登录mysql,然后执行:
    UPDATE user SET password=PASSWORD('123456') WHERE user='root';  # MySQL5.7起 password 字段名改为 authentication_string
    FLUSH PRIVILEGES; #必不可少

    也可以用Navicat等客户端连接后修改mysql下的user表,但改完还是得执行flush privileges;

    • 忘记root密码:编辑/etc/mysql/my.cnf,在[mysqld]的段末加上一句:skip-grant-tables;重启mysql;此时不用密码即可登录,修改root密码并flushprivileges;编辑/etc/mysql/my.cn,注释掉skip-grant-tables;重启即可

    (上述方法适用于MySQL5.7以前的版本;对于5.7,字段名 password 改为  authentication_string ,对于5.7以后的版本如8.0移除了PASSWORD函数所以上述方法不适用。更多参见:MySQL root密码修改

    5、常用操作

    在mysql 命令行操作:

    一、mysql服务操作 
        0、查看数据库版本 sql-> status; 
        1、net start mysql //启动mysql服务 
        2、net stop mysql //停止mysql服务  
        3、mysql -h主机地址 -u用户名 -p用户密码 //进入mysql数据库 
        4、quit //退出mysql操作 
        5、mysqladmin -u用户名 -p旧密码 password 新密码 //更改密码 
        6grant select on 数据库.* to 用户名@登录主机 identified by "密码" //增加新用户 
        exemple: 
            grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc"; //增加一个用户test2密码为abc,只可在localhost即MYSQL数据库所在的那台主机上登录、只有查询、插入、修改、删除的权限
            grant select,insert,update,delete on mydb.* to test2@localhost identified by ""; //不设密码 
        7、show grants;   or   SHOW GRANTS FOR 'user_name'@'host';  //查看授权信息
    
    二、数据库操作 
        1、show databases; //列出数据库 
        2use database_name //使用database_name数据库 
        3create database data_name //创建名为data_name的数据库 
        4drop database data_name //删除一个名为data_name的数据库 
    
    三、表操作 
        1、show databases;//列出所有数据库 
        2use 数据库名; //选择某一数据库
        3、show tables //列出所有表 
        4、建表:
            create table tab_name( 
                id int(10) not null auto_increment primary key, 
                name varchar(40), 
                pwd varchar(40) 
            ) charset=utf-8; //创建一个名为tab_name的新表    
        5、show create table test ; //查看建表的完整语句
        5drop table tab_name 删除名为tab_name的数据表 
        6、describe tab_name //显示名为tab_name的表的数据结构 
        7、show columns from tab_name //同上 
        8delete from tab_name //将表tab_name中的记录清空 
        9select * from tab_name //显示表tab_name中的记录 
        10、mysqldump -uUSER -pPASSWORD --no-data DATABASE TABLE > table.sql //复制表结构 
    
    四、修改表结构
        0、复制表
            create table new_tab_name like old_tab_name; //复制表,不包含旧表的数据 
            create table new_tab_name like old_tab_name; //复制表,包含原表数据
        1alter table tab_name rename to new_tab_name; //修改表名
        2alter table tab_name change old_col new_col varchar(40); //修改列名,必须为当前字段指定数据类型等属性,否则不能修改 
        3alter table visitor modify mid int(11); //修改列定义
            alter table tab_name modify col_name varchar(40) not null //修改字段属性,注若加上not null则要求原字段下没有数据 
            SQL Server200下的写法是:Alter Table table_name Alter Column col_name varchar(30) not null; 
        4alter table tab_name ADD PRIMARY KEY (col_name); //说明:更改表得的定义把某个栏位设为主键。 
        5alter table tab_name DROP PRIMARY KEY (col_name); //说明:把主键的定义删除 
        6alter table tab_name add col_name varchar(20); //在tab_name表中增加一个名为col_name的字段且类型为varchar(20) 
        7alter table tab_name drop col_name; //在tab_name中将col_name字段删除 
    
    
    
    五、数据的备份与恢复 
        1.执行外部的sql脚本 
            当前数据库上执行:mysql < input.sql 
            指定数据库上执行:mysql [表名] < input.sql 
        2.数据传入命令 load data local infile "[文件名]" into table [表名]; 
        3、备份数据库
            mysqldump --opt school>school.bbb 
            mysqldump -u [user] -p [password] databasename > filename (备份) 
            mysql -u [user] -p [password] databasename < filename (恢复) 
    
    六、卸载 
        sudo apt-get remove mysql-server mysql-client 
        sudo apt-get autoremove
    View Code

    在普通命令行操作(未进入mysql 命令行): 

     $ mysql -u USER -pPASSWORD -h HOSTNAME -e "SQL_QUERY" :执行指定操作

     $ mysql -u USER -pPASSWORD -e "SQL_QUERY" > FILE :执行指定操作,结果输出到指定文件

     $ mysql -u USER -pPASSWORD  db_name < db.sql :从指定sql脚本执行sql命令

    事务

    关于事务隔离级别,见事务四大特性及事务隔离级别,查看隔离级别: select @@tx_isolation; 。

    在MySQL中每条SQL命令默认都会被自动Commit(即默认开启自动提交功能),可以通过 SET AUTOCOMMIT=0; //0关闭、1开启 关闭。也可以用begin命令自己事务,此时自动提交功能被关闭:

    -- 声明事务的开始
    BEGIN(或START TRANSACTION);
    
    
    -- 定义保存点(回滚点)
    [ SAVEPOINT savepoint_name(名称); ] //可以没有
    
    
    -- 提交整个事务
    COMMIT;
    
    
    -- 回滚到事务初始状态
    ROLLBACK;  //ROLLBACK TO SAVEPOINT savepoint_name(名称);--回滚到指定保存点

    6、增加用户

    grant select on 数据库.* to 用户名@登录主机 identified by "密码" 

    如:

    grant select,insert,update,delete on *.* to user_1@"%" Identified by "123"; 

    grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123";

    授予所有权限:

    grant all privileges on *.* to root@"%" identified by "password";
    
    flush privileges;

    注:MySQL安装完后默认会建立一些账户,如下:

    有两类:

    • root账户:User为root,Host为本地地址127.0.0.1(对应IPV4)、::1(对应IPV6)、本机名,三者密码一样
    • debian-sys-maint账户:这是系统自动生成的mysql用户,用于系统对MySQL的维护。debian和ubuntu系统都会这样做,密码是安装mysql时随时生成的,停止或重启服务都靠它。可以在/etc/mysql/debian.cnf查看到使用此用户的配置。

    有时候会遇到即使是root用户也没法grant新用户的情况,此时可以以root用户登录,查看'mysql'表的root用户是否有grant权限:Grant_priv列是否为Y。

    7、卸载

    先用 purge 命令卸载:

    apt-get --purge remove mysql-server
    apt-get --purge remove mysql-client
    apt-get --purge remove mysql-common

    再清理残余:

    apt-get autoremove
    apt-get autoclean
    rm /etc/mysql/ -R
    rm /var/lib/mysql/ -R

    8、编码问题

    参考资料:http://www.cnblogs.com/whiteyun/archive/2011/05/19/2051097.html

    可以用 SHOW VARIABLES LIKE 'character%'; 命令查看数据库、连接、客户端等的字符集,结果示例如下:

    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+

    可以用 SHOW VARIABLES LIKE 'collation_%'; 命令查看排序规则,结果示例如下:

    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | utf8_general_ci   |
    | collation_database   | latin1_swedish_ci |
    | collation_server     | latin1_swedish_ci |
    +----------------------+-------------------+

    MySQL默认字符集是字符集是 latin1(即iso8859-1),这是不支持中文的字符集,会造成程序乱码等问题,所以需要修改字符集,一般改为utf8即可解决问题。方法如下:

    1、在[client]字段里加入default-character-set=utf8,如下:
    [client]
    port = 3306
    socket = /var/lib/mysql/mysql.sock
    default-character-set=utf8

    2、在[mysqld]字段里加入character-set-server=utf8,如下:
    [mysqld]
    port = 3306
    socket = /var/lib/mysql/mysql.sock
    character-set-server=utf8

    3、在[mysql]字段里加入default-character-set=utf8,如下:
    [mysql]
    no-auto-rehash
    default-character-set=utf8

    修改完成后,service mysql restart重启mysql服务就生效。

    其他:

    utf8字符集用1~4字节表示字符,然而在MySQL中实现的utf8最多用3个字节表示字符,这导致有些字符无法表示。MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4。简单说 utf8mb4 是 utf8 的超集并完全兼容utf8,能够用四个字节存储更多的字符,如可以表示emoj元素。具体可查看 mysql utf8与utf8mb4

    9、存储引擎的选择

    to do ...

    MySQL Innodb和MyIsam存储引擎的主要区别:

    锁粒度:行锁;表锁

    事务:支持;不支持

    外键:支持;不支持

    全文索引:不支持(1.2.x开始支持);支持

    聚簇索引:支持;不支持

    10、其他

    在CentOS下安装方式与上面不一样,可以借助yum安装。

    (具体可查看:https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html

    (这里版本: 

    Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017

    mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL) 

    wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
    yum localinstall mysql80-community-release-el7-1.noarch.rpm  
    yum install mysql-community-server  #时间比较漫长
    service mysqld restart # status/stop/start  #与上面所述Ubuntu下的有点区别,这里是 mysqld 而不是 mysql

    安装过程并不会提示设密码而是自动产生一个初始密码。文档中说是产生在 /var/log/mysqld.log ,可以通过 grep 'temporary password' /var/log/mysqld.log 获得,然而本人安装后发现文件里内容是空的,解决:看签名的“修改密码”一节,借助"skip-grant-tables"设置密码。

    参考资料:

    http://www.cnblogs.com/xusir/p/3334217.html

    https://blog.csdn.net/javazejian/article/details/61614366 MySQL基础(数据类型、SQ语法等

     https://blog.csdn.net/javazejian/article/details/69857949 MySQL进阶(索引、变量、存储过程、存储函数、触发器、事务等

     

  • 相关阅读:
    write(byte[] b, int off, int len)
    getAttribute 与getParmeter 区别
    ServletContext
    SercletConfig 详解
    MYSQL导入数据出现ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
    mybatis在xml文件中处理大于号小于号的方法
    阿里云实名认证接口调试
    js encodeuricomponent base64
    Introspector内存溢出的原理解析
    JVM虚拟机工作原理
  • 原文地址:https://www.cnblogs.com/z-sm/p/4728272.html
Copyright © 2020-2023  润新知