如何配置我的 MariaDB 客户端 ( mysql
),这样无论我连接到哪个主机,都无需输入密码即可连接?
我不能只在[client]
部分输入密码,~/.my.cnf
因为这将适用于所有主机。
例如,我希望能够连接mysql -h myhost mydatabase
,即。无需指定用户名或密码。更好的是能够指定“主机别名”而不是实际的(笨拙的长)主机名。
听起来这在使用mysql-config-editor的 MySQL 中是可能的,但 MariaDB没有此功能。
如何配置我的 MariaDB 客户端 ( mysql
),这样无论我连接到哪个主机,都无需输入密码即可连接?
我不能只在[client]
部分输入密码,~/.my.cnf
因为这将适用于所有主机。
例如,我希望能够连接mysql -h myhost mydatabase
,即。无需指定用户名或密码。更好的是能够指定“主机别名”而不是实际的(笨拙的长)主机名。
听起来这在使用mysql-config-editor的 MySQL 中是可能的,但 MariaDB没有此功能。
在 MySQL 命令行客户端 (Linux) 中,当我通过按CTRL+终止查询时,c这通常工作正常。
mysql (slave) > select sleep(5);
^CCtrl-C -- sending "KILL QUERY 117920686" to server ...
Ctrl-C -- query aborted.
+----------+
| sleep(5) |
+----------+
+----------+
1 row in set (0.78 sec)
然而,当我在我的实时主服务器(在所有服务器中,它必须是这一个......)上做同样的事情时,它以某种方式发送了错误的线程 ID。
mysql (master) > select sleep(5);
^CCtrl-C -- sending "KILL QUERY 770543254" to server ...
Ctrl-C -- query aborted.
+----------+
| sleep(5) |
+----------+
+----------+
1 row in set (5.00 sec) /* <- it obviously hasn't aborted at all */
ID太低了 其他线程的 ID 类似于 26534760326。所有服务器的版本相同:
# yum list installed mysql*
Loaded plugins: dellsysid, rhnplugin, security, ulninfo
This system is receiving updates from RHN Classic or Red Hat Satellite.
Installed Packages
MySQL-python.x86_64 1.2.3-0.3.c1.1.el6 @public_ol6_latest
mysql-community-client.x86_64 5.6.27-2.el6 @mysql56-community
mysql-community-common.x86_64 5.6.27-2.el6 @mysql56-community
mysql-community-libs.x86_64 5.6.27-2.el6 @mysql56-community
mysql-community-libs-compat.x86_64 5.6.27-2.el6 @mysql56-community
mysql-community-release.noarch el6-5 @/mysql-community-release-el6-5.noarch
mysql-community-server.x86_64 5.6.27-2.el6 @mysql56-community
附加信息:
然而,该connection_id()
函数返回正确的值。
root@ods01:(none) > select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 26542310314 |
+-----------------+
1 row in set (0.00 sec)
root@ods01:(none) > select sleep(5);
^CCtrl-C -- sending "KILL QUERY 772506538" to server ...
Ctrl-C -- query aborted.
+----------+
| sleep(5) |
+----------+
+----------+
1 row in set (5.00 sec)
有谁知道如何解决这一问题?
运行 SQL Server 2017,使用交互式REPL 客户端sqlcmd
如何获得查询执行时间?
SQL Server Execution Times:
CPU time = 1859 ms, elapsed time = 321 ms.
我第一次尝试在我的 Ubuntu 桌面上设置 Squirrel SQL。这是我用来连接数据库的 SQLPlus 命令:
sqlplus64 "user/[email protected]:1876/atgpen1.lex.bb.com"
因此,我尝试使用 Oracle Thin Driver 在 Squirrel SQL 中进行如下设置:
jdbc:oracle:thin:@pashratgdb01.lex.bb.com:1876:atgpen1.lex.bb.com"
当我这样做时,我收到以下错误:
java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:202)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.awaitConnection(OpenConnectionCommand.java:132)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.access$100(OpenConnectionCommand.java:45)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand$2.run(OpenConnectionCommand.java:115)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.executeConnect(OpenConnectionCommand.java:171)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.access$000(OpenConnectionCommand.java:45)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand$1.run(OpenConnectionCommand.java:104)
... 5 more
Caused by: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)
at net.sourceforge.squirrel_sql.fw.sql.SQLDriverManager.getConnection(SQLDriverManager.java:133)
at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.executeConnect(OpenConnectionCommand.java:167)
... 7 more
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:275)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:264)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496)
... 12 more
我希望在命令行(控制台)界面提示符中显示我所连接的服务器的版本。根据我在文档中阅读的内容,可以执行 shell 命令,可以显示 psql 变量值。
这个想法是在连接时获取服务器的版本信息,并在客户端的提示中使用它。我如何(在.psqlrc
文件中?)在 psql 变量中分配服务器版本?
编辑:Jack Douglas ♦ 指出了这个\gset
特征,给出了正确的答案。结果是
show server_version
\gset
\set PROMPT1 '%:server_version: >'
谢谢你。
打开两个mysql
命令行客户端并连接到您的数据库。在客户端 #1 中,输入
START TRANSACTION;
在客户端 #2 中,使用SHOW PROCESSLIST
,然后
KILL [n];
n
客户端 #1 的连接的 ID在哪里。Bam——事务回滚。但客户#1 不知道这一点。然后从客户端 #1 发送一些命令——比如说,
UPDATE clients SET important_field = NULL;
你会得到回应:
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Query OK, 10000 rows affected (0.05 sec)
Rows matched: 10000 Changed: 10000 Warnings: 0
哎呀,你说,打得更好ROLLBACK!
然后你意识到,令你惊恐的是,你不再进行交易了。
这是我的问题:如果我想KILL
在某个时候建立连接,有什么方法可以确保这种“现在你在交易中,现在你不在”的情况不会发生,除非将自动提交设置为0 在系统级别?
请注意,上面的内容是在mysql
5.1 下测试的——如果以后的版本提供了修复,我很想听听。我还希望看到使用 JDBC、ADO.NET 等进行的测试,看看它们是否容易受到同样问题的影响。
(在元注释中,这个问题来自 Server Fault 的两个问题。我真的希望 DBA 社区能提供更多帮助......)
更新:请参阅下面的答案。这个问题似乎是mysql
命令行实用程序所独有的,具有奇怪的自动重新连接“功能”。最有可能的是,任何不是建立在实用程序之上的工具或库mysql
都不会表现出这种行为。但是,您可能需要测试您正在使用的任何内容以确保确定,或者接受 drachenstern 的建议并将您的事务包装在存储过程中。