第一篇:遠程客戶端連接MysqL數據庫太慢解決方案
遠程客戶端連接MysqL數據庫太慢解決方案
遠程客戶端連接MysqL數據庫太慢解決方案
局域網客戶端訪問mysql 連接慢問題解決。
cd /etc/mysql
vi my.conf
[mysqld]
skip-name-resolve
此選項禁用了DNS解析,連接速度會快很多。
不過,這樣的話就不能在MySQL的授權表中使用
主機名了而只能用ip格式。
第二篇:MySQL數據庫連接超時(Wait_timeout)問題總結
當應用程序和數據庫建立連接時,如果超過了8個小時,應用程序不去訪問數據庫,數據庫就會出現斷掉連接的現象。這時再次訪問就會拋出異常.一般的解決方法大多是在數據庫連接字符串中增加“autoReconnect=true ”選項。但是這只對mysql4以前的版本有效。在最新的mysql中是無效的。其實要解決這個問題也有一個簡單的方法,就是修改mysql的啟動參數。缺省情況下mysql的timeout時間是28800秒,正好是8小時,增加一個0就可以了。決定從根源入手,設置mysql的wait_timeout為31536000(一年),再來試試。set-variable=wait_timeout=31536000 set-variable=interactive_timeout=31536000 問題得到了解決 想了深入解一下mysql的工作原理
百度了一下Google發現很多人都出現過這種問題,大多是配置hibernate時候出的問題,可惜我的項目中沒有使用到hibernate只是簡單的自己配了一個連接池,所以綜合了問題的關鍵所在改了一下數據庫配置,在這里暫且記錄一下,以后備用。
Mysql服務器默認的“wait_timeout”是8小時,也就是說一個connection空閑超過8個小時,Mysql將自動斷開該 connection。這就是問題的所在。
最近碰到了這個問題,檢查后發現數據庫連接池中保存的連接超時后失效了,下面是官方的解釋 mysql gone-away
從Mysql 5.x的某個版本之后,MySQL的自動關閉空閑連接的特性被修改了,假如一個連接空閑到超時時間(默認28000秒8小時),再次發起的Reconnect重新連接請求不會被接受,需要重新建立新連接,這就導致了SER的重連機制不能正常工作:SER只會在需要操作數據庫時去使用同一個連接接口,斷開了則發起重新連接請求,而且這個問題短期內SER也不能夠解決。
下文中將具體講述處理的方法:
1.使用Mysql 4.0或4.1版本,如果沒有用到Mysql 5的一些新特性比如存儲過程觸發器之類。
2.定時重啟Mysql服務器或Ser(由于本問題可能同樣會影響到其它一些需要Mysql支持的服務器程序,所以重啟Mysql服務器為好,但需要檢測Mysql服務器不被使用的一個時間重啟比較難確定)
3.設置my.cnf,有mysqld字段內增加參數:
[mysqld]port = 3306socket = /tmp/mysql.sockwait_timeout= 500000interactive_timeout = 500000(500000秒約五六天的超時時間,可根據實際需要選擇一個數據庫可能空閑的最長時間稍大的時間值。)重啟Mysqld應用即可,也可以在執行mysqld時加-o wait_timeout=500000參數同樣效果。
在MySQL客戶端show variable時應該可以看到最后一條從默認的wait_time=28000變成500000了。
(假如重啟Mysqld不生效,可以重啟機子)
第三篇:Mysql數據庫學習心得
Mysql數據庫學習心得(1)
由于工作中需要使用mysql,筆者通過網上學習,動手實踐,終于從一個“數據庫菜鳥”變成了能熟練操作mysql的“準大蝦”了,:)?,F將學習心得整理如下。
MySQL是完全網絡化的跨平臺關系型數據庫系統,一個真正的多用戶、多線程SQL數據庫服務器,同時是具有客戶機/服務器體系結構的分布式數據庫管理系統。它具有功能強、使
用簡便、管理方便、運行速度快、安全可靠性強等優點,用戶可利用許多語言編寫訪問MySQL數據庫的程序,對于中、小型應用系統是非常理想的。除了支持標準的ANSI SQL語句,更重要的是,它還支持多種平臺,而在Unix系統上該軟件支持多線程運行方式,從而能獲得相當好的性能。對于不使用Unix的用戶,它可以在Windows NT系統上以系統服務方式運行,或者在Windows 95/98系統上以普通進程方式運行。而在Unix/Linux系統上,MySQL支持多線程運行方式,從而能獲得相當好的性能,而且它是屬于開放源代碼軟。
MySQL是以一個客戶機/服務器結構的實現,它由一個服務器守護程序mysqld和很多不同的客戶程序和庫組成,MySQL的執行性能非常高,運行速度非???,并非常容易使用,是一個非常棒的數據庫。MySQL的官方發音是“My Ess Que Ell”(不是MY-SEQUEL)。
一.獲得MySQL
首先必須下載MySQL。Mysql的官方網站是:www.tmdps.cnf copy為c:my.cnf,并把c:mysqlibgwinb19.dll copy到winntsystem32。
3。啟動mysql的方法是:
c:mysqlinmysqld-shareware--install
net start mysql
這么簡單,就可以啟動了。
4。更改超級用戶(root)的密碼:
C:mysqlinmysql mysql
mysql> UPDATE user SET password=PASSWORD('your password')swheresuser='root';
mysql> QUIT
C:mysqlinmysqladmin reload
使用命令C:mysqlinmysqlshow去看看檢測一下。在這里應該顯示:
+-----------+
| Databases |
+-----------+
| mysql |
| test |
+-----------+
看到這些信息這一步就證明沒問題了
再來:
C:mysqlinmysqlshow--user=root--password=your password mysql
在這里應該顯示:
Database: mysql
+--------------+
| Tables |
+--------------+
| columns_priv |
| db |
| host |
| tables_priv |
| user |
+--------------+
一切搞定!
5。C:mysqlinmysqladmin version status proc
應該可以看到這些版本信息的:
mysqladmin Ver 8.0 Distrib 3.22.32, for Win95/Win98 on i586
TCX Datakonsult AB, by Monty
Server version 3.22.32-shareware-debug
Protocol version 10
Connection localhost via TCP/IP
TCP port 3306
Uptime: 1 hour 29 min 30 sec
Threads: 1 Questions: 72 Slow queries: 0 Opens: 16 Flush tables: 1 Open tables: 0 Memory in use: 16423K Max memory
used: 16490K
Uptime: 5370 Threads: 1 Questions: 72 Slow queries: 0 Opens: 16 Flush tables: 1 Open tables: 0 Memory in use: 16423K
Max memory used: 16490K
+----+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+----+---------+------+-------+------------------+
| 35 | ODBC | localhost | | Query | 0 | | show processlist |
+----+------+-----------+----+---------+------+-------+------------------+
接著,用show databases命令可以將安裝的數據庫列出來:
mysql> show databases;
你就可以看到:
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+ rows in set(0.00 sec)
如果一切正常的話,那說明MySQL可以完全工作了!如果要退出程序,輸入:exit
mysql> exit;
Bye
Mysql數據庫學習心得(3)------------------
三.Mysql常識
(一)字段類型
1.INT[(M)]
正常大小整數類型
2.DOUBLE[(M,D)] [ZEROFILL]
正常大小(雙精密)浮點數字類型
3.DATE
日期類型。支持的范圍是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式來顯示DATE值,但是允許你使用字符串或數字把值賦給
DATE列
4.CHAR(M)
定長字符串類型,當存儲時,總是是用空格填滿右邊到指定的長度
5.BLOB TEXT
BLOB或TEXT類型,最大長度為65535(2^16-1)個字符。
6.VARCHAR
變長字符串類型,最常用的類型。
(二)基本操作
1:顯示數據庫
mysql>SHOW DATABASES;
2:當前選擇的數據庫,mysql> SELECT DATABASE();
+------------+
| DATABASE()|
+------------+
| test |
+------------+
3.當前數據庫包含的表信息:
mysql> SHOW TABLES;
+---------------------+
| Tables in test |
+---------------------+
| mytable1 |
| mytable2 |
+---------------------+
4.獲取表結構
mysql> desc mytable1;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| s1 | varchar(20)| YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
5.創建表
表是數據庫的最基本元素之一,表與表之間可以相互獨立,也可以相互關聯。創建表的基本語法如下:
create table table_name
(column_name datatype {identity |null|not null},…)
其中參數table_name和column_name必須滿足用戶數據庫中的識別器(identifier)的要求,參數datatype是一個標準的SQL類型或由用戶數
據庫提供的類型。用戶要使用non-null從句為各字段輸入數據。
create table還有一些其他選項,如創建臨時表和使用select子句從其他的表中讀取某些字段組成新表等。還有,在創建表是可用PRIMARY
KEY、KEY、INDEX等標識符設定某些字段為主鍵或索引等。書寫上要注意:在一對圓括號里的列出完整的字段清單。字段名間用逗號隔開
。字段名間的逗號后要加一個空格。最后一個字段名后不用逗號。所有的SQL陳述都以分號“;”結束。
例:
mysql>CREATE TABLE guest(name varchar(10),sex varchar(2),age int(3),career varchar(10));
6.創建索引
索引用于對數據庫的查詢。一般數據庫建有多種索引方案,每種方案都精于某一特定的查詢類。索引可以加速對數據庫的查詢過程。創建
索引的基本語法如下:
create index index_name
on table_name(col_name[(length)],...)
例:
mysql> CREATE INDEX number ON guest(number(10));
7.執行查詢
查詢是使用最多的SQL命令。查詢數據庫需要憑借結構、索引和字段類型等因素。大多數數據庫含有一個優化器(optimizer),把用戶的查
詢語句轉換成可選的形式,以提高查詢效率。
值得注意的是MySQL不支持SQL92標準的嵌套的where子句,即它只支持一個where子句。其基本語法如下:
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]
[DISTINCT | DISTINCTROW | ALL]
select_expression,...[INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
[FROM table_references
[WHERE where_definition]
[GROUP BY col_name,...]
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
[LIMIT [offset,] rows]
[PROCEDURE procedure_name] ]
其中where從句是定義選擇標準的地方,where_definition可以有不同的格式,但都遵循下面的形式:
字段名操作表達式
字段名操作字段名
在第一種形式下,標準把字段的值與表達式進行比較;在第二種形式下,把兩個字段的值進行比較。根據所比較的數據類型,search_condition中的操作可能選以下幾種:
=檢查是否相等
!=檢查是否不等
>(或>=)檢查左邊值是否大于(或大于等于)右邊值
<(或<=)檢查左邊值是否小于(或小于等于)右邊值
[not] between檢查左邊值是否在某個范圍內
[not] in檢查左邊是否某個特定集的成員
[not] like檢查左邊是否為右邊的子串
is [not] null檢查左邊是否為空值
在這里,可以用通配符_代表任何一個字符,%代表任何字符串。使用關鍵字、和可以生成復雜的詞,它們運行檢查時使用
布爾表達式的多重標準集。
例:
mysql> select t1.name, t2.salary from employee AS t1, info AS t2swherest1.name = t2.name;
mysql> select college, region, seed from tournament
ORDER BY region, seed;
mysql> select col_name from tbl_nameswherescol_name > 0;
8.改變表結構
在數據庫的使用過程中,有時需要改變它的表結構,包括改變字段名,甚至改變不同數據庫字段間的關系。可以實現上述改變的命令是
alter,其基本語法如下:
alter table table_name alter_spec [, alter_spec...]
例:
mysql> alter table dbname add column userid int(11)not null primary key auto_increment;
這樣,就在表dbname中添加了一個字段userid,類型為int(11)。
9.修改表中數據
在使用數據庫過程中,往往要修改其表中的數據,比如往表中添加新數據,刪除表中原有數據,或對表中原有數據進行更改。它們的基本
語法如下:
數據添加:
insert [into] table_name [(column(s))]
values(expression(s))
例:
mysql>insertsintosmydatabase values('php','mysql','asp','sqlserver','jsp','oracle');Mysql數據庫學習心得(4)------------------
10.表的數據更新
(1)一次修改一個字段,再次注意語法。文本需要加引號但數字不要。
mysql>update table01 set field03='new info'swheresfield01=1;
Query OK, 1 row affected(0.00 sec)
(2)一次改變多個字段,記住在每一個更新的字段間用逗號隔開。
mysql>update table01 set field04=19991022, field05=062218swheresfield01=1;
Query OK, 1 row affected(0.00 sec)
(3)一次更新多個數據
mysql>update table01 set field05=152901swheresfield04>19990101;
Query OK, 3 rows affected(0.00 sec)
11.刪除數據
mysql>delete from table01swheresfield01=3;
Query OK, 1 row affected(0.00 sec)
12.導入數據庫表
(1)創建.sql文件
(2)先產生一個庫如auction.c:mysqlin>mysqladmin-u root-p creat auction,會提示輸入密碼,然后成功創建。
(3)導入auction.sql文件
c:mysqlin>mysql-u root-p auction < auction.sql。
通過以上操作,就可以創建了一個數據庫auction以及其中的一個表auction。
13.mysql數據庫的授權
mysql>grant select,insert,delete,create,drop
on *.*(或test.*/user.*/..)
to用戶名@localhost
identified by '密碼';
如:新建一個用戶帳號以便可以訪問數據庫,需要進行如下操作:
mysql> grant usage
-> ON test.*
-> TO testuser@localhost;
Query OK, 0 rows affected(0.15 sec)
此后就創建了一個新用戶叫:testuser,這個用戶只能從localhost連接到數據庫并可以連接到test數據庫。下一步,我們必須指定
testuser這個用戶可以執行哪些操作:
mysql> GRANT select, insert, delete,update
-> ON test.*
-> TO testuser@localhost;
Query OK, 0 rows affected(0.00 sec)
此操作使testuser能夠在每一個test數據庫中的表執行SELECT,INSERT和DELETE以及UPDATE查詢操作?,F在我們結束操作并退出MySQL客戶
程序:
mysql> exit
Bye
14.授權MySQL用戶密碼
MySQL數據庫的默認用戶名為“root”(MS SQL Server的sa相似),密碼默認為空。在DOS提示符(注 意,不是mysql提示符)下輸入
c:mysqlin>“mysqladmin-u root-p password newpassword
回車后會提示你輸入原來的密碼,由于原來密碼為空,直接回車,root用戶的密碼便改為”newpassword“了。
Mysql數據庫學習心得(5)------------------
四.安裝phpMyAdmin
MySQL圖形界面管理器phpMyAdmin是一套以php3寫成,針對MySQL數據庫系統的Web管理界面。它可以很方便地以圖形化界面,來對MySQL數據庫里的字段、數據進行增加、刪除等的動作,更可以做數據庫本身的增刪管理;phpMyAdmin可以管理整個MySQL服務器(需要超級用戶),也可以管理單個數據庫。另外,您也可以通過使用這個圖形化界面來學習SQL正確的語法,直至熟練掌握。那要等到你看過MySQL手冊中相關的部分。你可以到http://www.phpwizard.net/phpMyAdmin/去下載最新的版本。
首先,將phpMyAdmin軟件包解到一個目錄下。
1.修改文檔config.inc.php3。
將原來的設定:
§cfgServers[1]['host'] = '';// MySQL hostname
§cfgServers[1]['port'] = '';// MySQL port-leave blank fordefault port
§cfgServers[1]['adv_auth'] = false;// Use advanced authentication?
§cfgServers[1]['stduser'] = '';// MySQL standard user(only needed with advanced auth)
§cfgServers[1]['stdpass'] = '';// MySQL standard password(only needed with advanced auth)
§cfgServers[1]['user'] = '';// MySQL user(only needed withbasic auth)
§cfgServers[1]['password'] = '';// MySQL password(only needed with basic auth)
§cfgServers[1]['only_db'] = '';// If set to a db-name, only this db is accessible
§cfgServers[1]['verbose'] = '';// Verbose name for this host-leave blank to show the hostname
:
:
require(”english.inc.php3“);
修改成:
§cfgServers[1]['host'] = 'MySQL Server的hostname';//填入您的MySQL Server的主機名稱
§cfgServers[1]['port'] = '';//填入連結MySQL的port,不填則以預設的port進行連結
§cfgServers[1]['adv_auth'] = true;//改成true則進入phpMyAdmin必須先身份認證
§cfgServers[1]['stduser'] = 'root';// MySQL使用者的帳號
§cfgServers[1]['stdpass'] = '密碼';// MySQL使用者的密碼
§cfgServers[1]['user'] = 'root';// MySQL管理帳號
§cfgServers[1]['password'] = '密碼';// MySQL管理密碼
§cfgServers[1]['only_db'] = '';//指定管理的資庫名稱,不填則可以管理整個Server
§cfgServers[1]['verbose'] = '';//指定MySQL的名稱,不填則使用系統本身的hostname
:
:
require(”chinese_gb.inc.php3");//將語言改成中文
說明:
(1)因本管理接口,可以以一個接口,管理多個MySQL Server,所以可以在config.inc.php3中找到
§cfgServers[1]...§cfgServers[1]...§cfgServers[1]...:
§cfgServers[2]...§cfgServers[2]...§cfgServers[2]...其中[1]代表第一個MySQL Server,[2]代表第二個MySQL Server,您要管理的MySQL Server超過三臺以上,您可以依照同樣的?述,增加[4].....下去!
(2)若您的MySQL Server與http Server是同一臺,則§cfgServers[1]['host'] =可直接填入localhost。
最后,打開流覽器,輸入你的網址/phpMyAdmin之后您會看到一個密碼驗證的小窗口,輸入您的MySQL管理帳號及密碼,即可成功地看到phpMyAdmin的管理畫面。通過phpmyadmin,你就可以圖形化的、方便的管理你的所有數據庫了。
五.小結
通過以上的學習和操作,終于可以自由操作mysql數據庫了,也可以輕車熟路的使用php或者asp調用mysql了。最后,筆者要特別感謝開發了mysql并且免費貢獻的天才以及在網上提供mysql使用說明的大蝦們。
第四篇:mysql數據庫要點總結
查詢(R)Selec子句
書寫順序
Select distinct:要返回的列或表達式 From:從中檢索數據的表 Where:行級過濾/分組前過濾 group by:分組說明
having:組級過濾/分組后過濾 order by:輸出排序順序desc/asc limit start, count:要檢索的行數 limit 3,4 從第3行開始的連續4行
SELECT order_num,sum(quantity*item_price)ordertotal FROM orderitems WHEREorder_numBETWEEN20005AND 20009GROUP BY order_num HAVINGsum(quantity*item_price)>=50ORDER BYordertotalDESCLIMIT4;執行順序
From表名->inner/left/right/ join on->where->group by->select distinct *->having->order by->limit start, count 插入Insert into(C)INSERT INTO students(name)values(‘楊過’),(‘小龍女’);更新(U)Update UPDATE customers SETcust_email = ‘elmer@fudd.com’WHEREcust_id = 10005;刪除(D)Delete DELETE FROM customers WHEREcust_id = 10006;Truncate刪除原來的表并重新創建一個表,刪除標的全部內容時效率高。
操作表
創建CREATE TABLE customers(Cust_idint not null auto_increment primary key,Cust_name char(50)not null,Cust_addresschar(50)null)engine = innoDB;更新ALTER TABLE刪除DROP TABLEcustomers2;重命名RENAME TABLE customers2 TO customers;操作數據庫
創建CREATE DATABASE xxx charset = utf8;刪除DROP DATABASEXXX;切換USE XXX;查看SHOW DATABASES;關聯查詢
INNER/LEFT/RIGHTJOIN ON SELECT students.name,subjects.title,scores.scoreFROM scores INNER JOIN students ONscores.stuid = students.id INNER JOIN subjects ONscores.subid = subjects.id;
第五篇:PHP MySql亂碼解決方案
PHP亂碼?Mysql亂碼?怎么解決?
PHP亂碼或者mysql亂碼,多半是因為沒有統一編碼,要解決PHP/mysql亂碼,只要做到三碼合一即可.所謂三碼,是指文件編碼,頁面編碼聲明和數據庫字符集,要使用相同的編碼,如全部為utf-8.怎么做到三碼合一?下面以utf-8為例,說明如何統一編碼.1.網頁文件編碼保存為utf-8無BOM
記事本,保存文件的時候選擇“編碼”為utf-8
editPlus,保存時選擇“encoding”為utf-8
UEStudio保存時選擇“格式”為utf-8無BOM
2.PHP頁面內部使用header('Content-type : text/html;Charset=UTF-8');聲明頁面編碼為utf-8
在html頭部寫入來聲明頁面編碼為utf-8
3.PHP頁面中連接數據庫服務器后執行sql查詢前使用以下代碼先將字符集設置為utf-8 mysql_query('SET NAMES utf8');[或mysqli,具體代碼這里不再寫了]
4.創建數據表的時候將默認編碼設置為utf8,將字符校對(callate)設置為utf8_general_ci CREATE TABLE IF NOT EXISTS `name`(....代碼....)ENGINE InnoDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci
做到這四點,相信你的網頁和數據庫不會再亂碼.