linux环境下mysql5.6的安装、配置、使用及常见问题解决办法

KinglyJn      2016-12-13

准备工作

本文档是在ubuntu14.04下安装5.6版本的mysql。
1、所用软件:Ubuntu14.04 LTS版
2、建议使用root用户
3、使用服务器地址:192.168.1.236
4、安装mysql5.6.19
5、安装mysql需要的依赖

apt-get install mysql-client-core-5.6
apt-get install mysql-client-5.6


安装mysql

如果运行如上命令后,在命令行信息最后看到类似
apt-get install mysql-server-5.6
安装过程中输入root的密码即可;


常用命令

验证原有主机是否已安装
这里主要是运行sudo netstat -tap | grep mysql命令查看是否有MySQL的端口,如果不加sudo的话因为权限无法顺利执行:
netstat -tap | grep mysql
如果按照成功,执行上面命令会显示:
tcp        0      0 localhost:mysql         *:*                     LISTEN      6840/mysqld 


启动
# 启动MySQL
$ sudo service mysql start 
# 关闭MySQL
$ sudo service mysql stop
# 重启MySQL
$ sudo service mysql restart
# 其他命令:
$ sudo /etc/init.d/mysql start
$ sudo /etc/init.d/mysql stop
$ sudo /etc/init.d/mysql restart

然后,再次键入命令来检查是否已启动MySQL:
$ netstat -tap | grep mysql
MySQL监听在localhost,说明MySQL已经启动。


登录
使用命令行mysql -u root -p 来登录MySQL:
$ mysql -u root -p

远程登录
$ mysql  -h192.168.1.160 -u root -p
$ mysql  -h192.168.1.160 -P3306 -u root -p


---------[一些常见操作]----------
#显示创建指令
$ show create database test;
$ show create table test.t_user;
#更改数据库的编码方式
$ alter database test CHARACTER SET = utf8;
#查看表、字段、索引
$ show tables from test;
$ show clumns from test.t_user;
$ show indexes from test.t_user;
#重命名--可能导致视图或者存储过程失效
rename table old_table_name to new_table_name;
alter table t_user change old_column_name new_column_name type;
#添加字段
alter table t_stu3 add pwd varchar(255) after name; --或者 first
#删除字段
alter table t_stu3 drop pwd, drop sex;
#修改字段
alter table t_stu3 modify stu_name varchar(20) not null after id;
alter table t_stu3 change stu_name sname varchar(20) not null after id;
#添加索引
alter table t_stu4 add index index_stu_name(stu_name);
alter table t_stu4 add constraint pk_stu4 primary key(id);
alter table t_stu4 add constraint fk_stu4_clazz4 foreign key(clazz_id) references t_clazz4(id) on delete restrict;
alert table t_stu4 add unique(name);
alter table t_stu3 alter column sex set default 3;

#删除索引
alter table t_stu3 drop index index_xxx;
alter table t_stu4 drop foreign key fk_stu4_clazz4;
alter table t_stu3 alter column sex drop default;

#插入记录
insert into t_clazz3(name) values('23班');
insert into t_clazz4 values(default, '23班');
insert into t_clazz4 set name='24班';
insert into t_clazz3(name) select name from t_clazz4;
#更新记录
update t_stu3 set name='keyllo', age=18 where id=1;
#删除记录
delete from t_stu3 where where id=1; --只删除数据
truncate table t_stu3; --除了删除数据,也删除索引等,可能主键id自增也会重置
drop table t_stu3;
---------[END]----------


重启服务
sudo service mysql restart


停止服务
sudo service mysql stop


查看服务状态
sudo service mysql status


常见错误解决方案

常见错误1: Can’t connect to MySQL server on ‘10.211.55.5’ (61)

我要在本机链接我本机上虚拟机的mysql,我使用mac下的workbench,就就是连接不上,报错信息为:“Can’t connect to MySQL server on ‘10.211.55.5’ (61)”,查了好多资料,有一种方法解决了我的问题:

#第一步:查看3306端口是否开启
# 使用ufw,sudo ufw status或者直接使用命令 netstat -an | grep 3306,如果结果显示类似:
#tcp   0   0 127.0.0.1:3306   0.0.0.0:*     LISTEN
#从结果可以看出3306端口只是在IP 127.0.0.1上监听,所以拒绝了其他IP的访问。

#第二步:修改配置文件
#修改文件 /etc/mysql/my.cnf文件,打开文件,找到下面内容:
    # Instead of skip-networking the default is now to listen only on
    # localhost which is more compatible and is not less secure.
    bind-address = 127.0.0.1
#把上面这一行注释掉或者把127.0.0.1换成合适的IP,建议注释掉。
#重新启动后,重新使用netstat检测:
    netstat -an | grep 3306tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

#第三步:使用创建的用户登录一下,成功。

#第四部:修改编码方式
> grep 'character' /etc/mysql/my.cnf 
default-character-set=utf8
character-set-server=utf8

#第五步:默认的存储引擎设置为支持外键和事务的存储引擎InnoDB
grep 'default-storage-engine' /etc/mysql/my.cnf 
default-storage-engine=INNODB
#可以查看数据库的存储引擎
show engines;


常见错误二:is not allowed to connect to this MySQL server

ERROR 1130: Host ’192.168.1.3′ is not allowed to connect to this MySQL server这是告诉你没有权限连接指定IP的主机,下面我们来看看解决办法。
处理方法有二个:

1、 授权法

例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.40.54' IDENTIFIED BY '123456' WITH GRANT OPTION;

2、 改表法

可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 “user” 表里的 “host” 项,从”localhost”改成”%
这个是因为权限的问题,处理方式如下:
shell>mysql --user=root -p
输入密码
mysql>use mysql
mysql>GRANT SELECT,INSERT,UPDATE,DELETE ON [db_name].* TO [username]@[ipadd] identified by '[password]';

[username]:远程登入的使用者代码
[db_name]:表示欲开放给使用者的数据库称
[password]:远程登入的使用者密码
[ipadd]:IP地址或者IP反查后的DNS Name,此例的内容需填入'60-248-32-13.HINET-IP.hinet.net' ,包函上引号()
(其实就是在远端服务器上执行,地址填写本地主机的ip地址。)

也可以这样写
mysql -u root -pvmware
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;


常见错误三:cant connect to mysql server 10060

出现这种现象的原因有两个,一个是当前用户被MySQL服务器拒绝,另外一个原因是3306端口被被防火墙禁掉,无法连接到该端口。解决方法如下:

1.设置远程用户访问权限:
// 任何远程主机都可以访问数据库  
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;     
//需要输入次命令使修改生效
mysql> FLUSH PRIVILEGES;      
//退出
mysql> EXIT


2.在iptables中开放3306端口
 #/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
 #/etc/rc.d/init.d/iptables save  保存:
 # service iptables restart  重启生效
当然除了开放3306端口外,还有一个方法就是关闭防火墙,命令为:
 # service iptables stop  
不过,不推荐这种做法,因为这会引起安全性问题。     


修改默认编码为UTF8

登录MySQL,进行字符编码查看:
#mysql -u root - p
输入密码
mysql> show variables like ‘character%’ ;  
+————————–+—————————-+ 
| Variable_name | Value | 
+————————–+—————————-+ 
| character_set_client | latin1 | 
| character_set_connection | latin1 | 
| character_set_database | latin1 | 
| character_set_filesystem | binary | 
| character_set_results | latin1 | 
| character_set_server | latin1 | 
| character_set_system | utf8 | 
| character_sets_dir | /usr/share/mysql/charsets/ | 
+————————–+—————————-+ 

在/etc/mysql下有个my.cnf文件,我们修改my.cnf文件
ubuntu@dbserver:~$ grep 'character' /etc/mysql/my.cnf 
[mysqld]  
......
character_set_server=utf8  
collation-server=utf8_general_ci  
......  
  
[client]
......
#设置客户端字符集
default-character-set=utf8  
......

修改完成后,service mysql restart重启mysql服务就生效。注意位置,default-character-set=utf8只能放在[client]下面,否则不能启动MySQL


mysql 的权限管理

--mysql涉及到的授权表
select * from mysql.user;
select * from mysql.tables_priv;
select * from mysql.columns_priv;

--显示当前的用户
select user();

--添加超级用户(DBA)
-- *.* 表示是所有的库,所有的表
-- keyllo@localhost表示用户名和允许用户登录使用的ip段
-- identified by 后面是用户登录所需的密码
-- with grant option 表示该用户还能给其他用户赋权
grant all privileges on *.* to keyllo@localhost identified by '123456' with grant option;

--添加普通用户
grant create,create temporary tables,update,execute,select,show view,usage,delete on test.* to keyllo2@localhost  identified by '123456' with grant option;

--使权限立即生效
flush privileges;

--收回用户的某些权限
revoke select,update on test.* from keyllo2@localhost;

--删除一个用户
drop user keyllo2@localhost;

--查看一个用户有哪些权限
show grants for root@localhost;


mysql数据库的备份和恢复

-- 备份
mysqldump -hlocalhost -uroot -pxxx test > ~/test/mysql_dump/dbname_20161213.dump
mysqldump -hlocalhost -uroot -pxxx test t_user > ~/test/mysql_dump/dbname_20161213.dump
mysqldump -hlocalhost -uroot -p --all-databases > xxx/xxx.dump

-- 还原
mysql -hlocalhost -uroot -pxxx dbname < ~/test/mysql_dump/dbname_20161213.dump
mysql -hlocalhost -uroot -pxxx dbname < ../exe.sql
mysql -hlocalhost -uroot -p < xxx/all_databases.dump
mysql -hlocalhost -uroot -pxxx dbname -e "select * from t_user"
mysql -hlocalhost -uroot -p dbname -e "select * from t_user"

-- 通过可视化工具进行数据库的备份和恢复(导出和导入)
mysql_workbenchnavicatdbeaversqlyog



Tags:


Share: