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进阶(索引、变量、存储过程、存储函数、触发器、事务等

 

原文地址:https://www.cnblogs.com/z-sm/p/4728272.html