数据库使用中的一些问题和开源工具推荐

Published: by Creative Commons Licence

数据库使用中的一些问题

MySQL Documentation

数据库系统概念 6

该书教学用到的数据库创建文件下载:地址

1.无法进入MySQL

(斌斌)centos 6.7安装mysql 5.7后 启动服务后,直接输入mysql:出现如下错误:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

在命令行中始终无法登录myslq,但是在数据库管理工具中却可以登录。然后才发现原来是必须使用mysql -uUserName -p 回车,然后输入密码的方式进行登录。

示例:

[root@centos7 ~]# mysql -ufan 
ERROR 1045 (28000): Access denied for user 'fan'@'localhost' (using password: NO)
[root@centos7 ~]# mysql -ufan -pfan123 
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'fan'@'localhost' (using password: YES)
[root@centos7 ~]# mysql -uroot -pfan123
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@centos7 ~]# mysql --version
mysql  Ver 14.14 Distrib 5.7.15, for Linux (x86_64) using  EditLine wrapper

# 成功登录
[root@centos7 ~]# mysql -ufan -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.15 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

2.Mysql5.7忘记root密码及mysql5.7修改root密码的方法

解决方案参考:http://www.jb51.net/article/77858.htm

http://www.cnblogs.com/kerrycode/p/3861719.html 此处mysql 5.7修改密码已经改变,参考此处:http://blog.csdn.net/u010603691/article/details/50379282 如果使用原来的方式会出现如下错误:

MySQL5.7更改密码时出现:

ERROR 1054 (42S22): Unknown column 'password' in 'field list'

mysql 5.7.6由于密码过期,而更改密码的方法是:ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; 这也是常用的更改密码的方式。

MySQL 密码验证插件

该插件要求密码至少8个字符;至少一个大写字母,一个小写字母,一个数字,一个特殊字符。

更多密码详情见CentOS 7 中 inMySQL.md。

比如root用户的初始密码如何查找。

3. 数据库管理工具,SQL客户端

参考:

在此介绍几个看起来不错、支持多个数据库、全平台且一直有更新的程序。

某位大牛介绍的三个开源程序:

  • DBeaver;安装包30M,功能也较强,界面与eclipse一样(用的应该就是eclipse所以占用内存多)。(另企业版不开源但仍然免费)网站,易于使用,直接就可以从maven下载各个驱动。
  • SQuirreL SQL Client;安装包50M,功能强,可以在不同(一些)数据库程序间复制数据等网站
  • SQL Workbench/J ;安装包5M,另可安装支持导出Excel的包,18M。SQL Workbench/J uses standard Java/JDBC calls to the databas,所以连接相应的数据库时需要下载该数据库的JDBC driver,就可连接参照

技术原因,(以上3个)它们都是使用JDBC连接数据库,这意味着可以支持所有数据库。也就是说它们都需要指定JDBC driver的目录。内存占用量DBeaver最多,SQL Workbench/J最少(375M –> 264M –> 187M)。

以下是自己找的两个对Oracle支持性比较好的,都对PL/SQL有所支持。:

这两者应该都需要事先安装有Oracle Client. (放弃)

3.1 SQL Workbench/J

对于SQL Workbench/J 的一些导出功能,比如导出为html等,需要另外下载 插件包,大概20M;见官网。

3.1.1 建立连接

在确保安装了java,可以访问远程mysql服务器,并且用来连接的用户有进行远程连接等权限的情况下的配置:

  • 下载软件包
  • 下载对于数据库的JDBC driver,参照(有完整驱动下载列表)
  • 运行 sqlworkbench ,**.sh**.bat
  • 首次运行,在弹出的Select Connection Profile对话框中,先选择"Manage Drivers"为其指定 JDBC driver的路径;之后再配置 URL
  • 如果MySQL配置正确就可以顺利连接。
  • 如果出现如下错误(MySQL配置问题)(它显示在命令行): (最终解决方法见后面) ``` WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
在对话框中显示的是 `Plugin "*61....22" is not loaded`,则需要更改URL,在URL中添加一些选项;它看起来的样子应该是这样(但这样应该并不是很安全):  

	jdbc:mysql://localhost:3306/databaseName?autoReconnect=true&useSSL=false

>直接是使用JDBC,不需要安装 Mysql client 。

好吧之后又出现连接错误,大概意思是:“不能与数据库服务器创建连接,尝试3次连接后,放弃”。


**最后的解决办法,就是让root用户有远程连接的权限,这样上面说的都不用改。**


> 如果想让mysql使用ssl进行登录,参考  [1](https://oplogo.me/mysql/2016/02/14/mysql-ssl/),    [2](http://netsecurity.51cto.com/art/201507/485360.htm)

[如何为CentOS 7上的MySQL启用SSL和远程连接](https://www.howtoing.com/how-to-enable-ssl-and-remote-connections-for-mysql-on-centos-7/)  

#### 3.1.2 基本使用方法,设置
下面的设置如果有必要就进行设置一下: 

1.  右键点击Tab标签页的头部,选择另存为文件(如果有必要)。
2.  "Tools"  -->  "configure toobar"。比如添加`Reformat SQL`按钮。
3.  选项中的`Data display`中设置输出结果的显示:`Row Height`设置行高,默认它只显示一行,比如:可以设置最大为2行。`Bold headers`加粗列名;`show row numbers`显示行号。`Column Width`设置最大列宽为 550。
4.  设置快捷键 `ctrl + /` 为注释本行。 行内注释以 `--   ` 开头(注意其末尾还有个空格)
5.  设置字体。
6.  保存工作空间。




### 3.2 SQuirreL SQL Client
支持中文。版本为 snapshot-20160731 即 Version 3.7.1

#### 3.2.1 建立连接

连接MySQL时的问题,指定驱动程序:
“驱动程序”--> “MySQL Driver”-->右键“修改驱动程序” -->“附加类路径”-->“指定下载的驱动jar包”-->“列出驱动程序”
**此时:**

1. 如果下载的是驱动包是 mysql-connector-java-5.1.39-bin.jar,则只会列出 com.mysql.fabric.jdbc.FabricMySQLDriver 这个类。(而使用SQL Workbench/J时会列出两个类的,我们需要的是另一个类com.mysql.jdbc.Driver)解决办法是下载旧版本的驱动。
2. 下载mysql-connector-java-5.0.8-bin.jar,就会列出com.mysql.jdbc.Driver。


>另见[Loading the Driver and Requesting a Fabric Connection](https://dev.mysql.com/doc/mysql-utilities/1.5/en/connector-j-fabric-connect.html) 但是我还是没有解决问题。





好吧连接后还是有问题,说sql语法有错,不知是怎么回事?比如: show databases;   show tables;  use table_name; 都提示错误。
错误消息:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=100' at line 1 SQLState: 42000 ErrorCode: 1064


[这里有一个相同的错误报告](https://sourceforge.net/p/squirrel-sql/mailman/message/31994063/) 

[Stack owerflow上同样的问题](http://stackoverflow.com/questions/15113707/error-code-1064-sql-state-42000-you-have-an-error-in-your-sql-syntax) 

解决办法:

1.  先使用这条语句,查询结果值:
  show variables where variable_name = 'sql_select_limit';
  尝试将该值设置为:
  try setting it to UINT32_MAX max value 4294967295. set sql_select_limit = 4294967295; Default is supposed to be UINT64_MAX(18446744073709551615).
  试了下没用。
2.  另一个是让升级driver。Try upgrading your JDBC MySQL driver.
  他认为这是JDBC MySQL driver 的一个bug。

以上都是废话:  
**最后解决方法是在[Maven](http://central.maven.org/maven2/mysql/mysql-connector-java/6.0.4/) 下载新的Driver**,还可以找一下有没有新版。

功能还是挺强的,比如可以查看数据库可以使用哪些函数...


#### 3.1.2 基本使用方法,设置
界面丑不要仅,可是本来屏幕很小了,图标太多...留下的编辑区域太小;而且使用输入法时,输入法的弹出框的上边缘是在该软件的下边缘的。

调整界面:
文件 -- 全局设置 -- 常规选项卡下,依次取消   "显示主窗口工具条" "显示主窗口状态栏" "在工具条上显示彩色图标"。重启程序。
文件 -- 全局设置 -- 常规选项卡下,
会话属性设置的 常规选项卡下,设置外观;SQL选项卡下设置字体。




[SQuirreL SQL Client使用入门1](http://blog.csdn.net/ycpanda/article/details/46238663) 
[SQuirreL SQL Client使用入门2---插件使用](http://blog.csdn.net/ycpanda/article/details/46239537) 
[ SQuirreL SQL Client使用入门2---插件使用2](http://blog.csdn.net/ycpanda/article/details/46239859) 


卸载:在其安装目录下有一个 Uninstaller ,执行即可卸载。

## Oracle 11g 
驱动下载: 要下载的文件为 **[ojdbc6.jar](http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html) ** ,看准版本。

Oracle 连接参考:
[How to Connect to Oracle via JDBC](https://razorsql.com/articles/oracle_jdbc_connect.html) 
[JDBC](http://www.orafaq.com/wiki/JDBC) 

连接URL: 
默认端口为 1521

### JDBC连接步骤:

- 服务端运行命令: 
# 假设一切都是默认设置
dbstart            #开启数据库
lsnrctl start    #开启默认监听器(事先使用netca进行过配置) ``` - 下载ojdbc6.jar包(只要是11g R2的都行,这里下载11g的最新版) - 在SQL客户端中添加该驱动 - 配置URL;比如: jdbc:oracle:thin:@//127.0.0.1:1521/ORA11G - 用户名:sys 。当选择使用oracle用户是出现错误,或者尝试使用system用户,或其它用户。

Oracle client

有两种类型,其中一种是轻量级。 太大了无需下载, 650M。

下载网站地址 前两个是client,还有一些是额外支持的附加包。

客户端安装指南: Database Client Quick Installation Guide Client Installation Guide 11g Release 2 (11.2) for Linux

MySQL乱码问题

原理 如果在创建数据库和表时没有指定字符集而出现乱码,解决办法就只有,如上链接中说的方法是正确的,乱码的原因有3个方面,必须同时解决。

创建数据库,表,时提前指定字符集

mysql>CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;

注意后面这句话 "COLLATE utf8_general_ci",大致意思是在排序时根据utf8校验集来排序 那么在这个数据库下创建的所有数据表的默认字符集都会是utf8了

mysql>create table my_table (name varchar(20) not null default '')default charset=utf8;

这句话就是创建一个表了,制定默认字符集为utf8

在客户端使用: set names utf8; 该语句同时设置了: set character_set_client='utf8' set character_set_connection='utf8' set character_set_results='utf8'

在.my.cnf文件中配置。 最后只有server端字符集不对,后来在 /etc/my.cnf文件中也进行了配置后就好了。

比如在客户端的~/.my.cnf文件中的设置:

[client]
host = 127.0.0.1
port = 3306						#前面两项可以不设置
default-character-set=utf8

在服务器端的~/.my.cnf文件中的设置(我也不知到它是不是有用)

在服务器端的/etc/my.cnf中的设置(有作用):