設定建議:
對於單台啟動並執行WEB伺服器,建議加上:
skip-locking
skip-name-resolve
skip-networking
在PHP連結資料庫時使用"LOCALHOST".這樣MySQL 用戶端庫將覆蓋之並嘗試串連到本地通訊端.(
我們可以從PHP.INI中
代碼:
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /tmp/mysql.sock看出 預設情況下 UNIX 將訪問/tmp/mysql.sock)
以下是部分選項解釋:
my.cnf預設是不存在的.你可以在/usr/local/share/mysql/下看到:
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf
等檔案.將其中合適你機器配置的檔案拷貝到/etc/my.cnf或mysql data目錄/my.cnf(/var/db/mysql)下或~/.my.cnf.檔案內都有詳細的說明
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
# 避免MySQL的外部鎖定,減少出錯幾率增強穩定性。
skip-name-resolve
禁止MySQL對外部串連進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機串連授權都要使用IP地址方式,否則MySQL將無法正常處理串連請求!
back_log = 384
指定MySQL可能的串連數量。當MySQL主線程在很短的時間內接收到非常多的串連請求,該參數生效,主線程花費很短的時間檢查串連並且啟動一個新線程。
back_log參數的值指出在MySQL暫時停止回應新請求之前的短時間內多少個請求可以被存在堆棧中。如果系統在一個短時間內有很多串連,則需要增大該參數的值,該參數值指定到來的TCP/IP串連的偵聽隊列的大小。不同的作業系統在這個隊列大小上有它自己的限制。
試圖設定back_log高於你的作業系統的限制將是無效的。預設值為50。對於Linux系統推薦設定為小於512的整數。
key_buffer_size = 256M
# key_buffer_size指定用於索引的緩衝區大小,增加它可得到更好的索引處理效能。
對於記憶體在4GB左右的伺服器該參數可設定為256M或384M。
注意:該參數值設定的過大反而會是伺服器整體效率降低!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
查詢排序時所能使用的緩衝區大小。注意:該參數對應的分配記憶體是每串連獨佔!如果有100個串連,那麼實際分配的總共排序緩衝區大小為100 × 6 = 600MB。所以,對於記憶體在4GB左右的伺服器推薦設定為6-8M。
read_buffer_size = 4M
讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享!
join_buffer_size = 8M
聯集查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享!
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
指定MySQL查詢緩衝區的大小。可以通過在MySQL控制台執行以下命令觀察:
代碼:
# > SHOW VARIABLES LIKE '%query_cache%';
# > SHOW STATUS LIKE 'Qcache%';如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況;
如果Qcache_hits的值非常大,則表明查詢緩衝使用非常頻繁,如果該值較小反而會影響效率,那麼可以考慮不用查詢緩衝;Qcache_free_blocks,如果該值非常大,則表明緩衝區中片段很多。
tmp_table_size = 256M
max_connections = 768
指定MySQL允許的最大串連進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。
max_connect_errors = 10000000
wait_timeout = 10
指定一個請求的最大連線時間,對於4GB左右記憶體的伺服器可以設定為5-10。
thread_concurrency = 8
該參數取值為伺服器邏輯CPU數量×2,在本例中,伺服器有2顆物理CPU,而每顆物理CPU又支援H.T超執行緒,所以實際取值為4 × 2 = 8
skip-networking
開啟該選項可以徹底關閉MySQL的TCP/IP串連方式,如果WEB伺服器是以遠端連線的方式訪問MySQL資料庫伺服器則不要開啟該選項!否則將無法正常串連!
一、 關於MySQL5
MySQL5系列資料庫是MySQL的最新版本的資料庫,比較流行的發行版是mysql-5.0.18。MySQL 英文官方網站是http://www.mysql.com
二、 獲得MySQL5
所有的關於MySQL資料庫的程式,都可以在它的英文官方網站下載到,但是,鑒於不不是所有人的英文都很好,所以建議大家盡量區MySQL的中文官方網站下載自己所需的程式,如果找不到,再去找英文的網站。
MySQL5有安裝版和免安裝版之分,顧名思義,安裝版就是需要安裝以後才可以使用;免安裝版的MySQL下載下來之後就可以使用,或者進行簡單的設定就可以使用。
MySQL5安裝版:
Windows版本:http://download.mysql.cn/src/2006/0218/199.html
Linux版本(源碼包):http://download.mysql.cn/src/2006/0208/62.html
MySQL5免安裝版:
Windows版本:http://download.mysql.cn/src/2006/0302/205.html
三、 MySQL5安裝
Windows版安裝手冊:http://bbs.mysql.cn/thread-261-1-1.html
Linux版本(源碼包)安裝手冊:http://bbs.mysql.cn/thread-493-1-2.html
MySQL有安裝版本和免安裝版本,免安裝版本解壓後的檔案夾內沒有安裝程式,可以直接使用。
Windows免安裝版本使用手冊:http://bbs.mysql.cn/thread-552-1-1.html
四、 備份與恢複
常規備份命令是mysqldump,這裡以tm資料庫為例,做簡單介紹,詳細資料參考
http://info.mysql.cn/install/2006/0410/5521.html
備份:
#mysqldump -u root -p tm > tm_20060101.sql
按提示輸入密碼,這就把tm資料庫所有的表結構和資料備份到tm_20060101.sql了,因為要總進行備份工作,如果資料量大會佔用很大空間,
這是可以利用gzip壓縮資料,命令如下:
#mysqldump -u root -p tm | gzip > tm_20060101.sql.gz
還可以備份到遠程機器,用-h制定,如
#mysqldump -u root -p tm > tm_20060101.sql -h xxx.xxx.xxx.xxx
可以直接備份到IP地址為xxx.xxx.xxx.xxx的遠端電腦。
系統崩潰,重建系統,或恢複資料庫時,可以這樣恢複資料:
#mysql -u root -p tm < tm_20060101.sql
從壓縮檔直接恢複:
#gunzip < tm_20060101.sql.gz | mysql -u root -p tm
五、 FAQ
Q:為什麼我下在的“安裝程式”裡面沒有安裝檔案?
A:你下載的可能是免安裝版本。請給出詳細的版本資訊。
Q:如何啟動和關閉mysql?
A:linux下:比如我的mysql是用源碼方式安裝在/usr/local/mysql
自動:將/usr/local/mysql/share/mysql/mysql.server拷貝到/etc/rc.d/init.d/下,然後
chkconfig --add mysql.server就可以開機就啟動mysql服務了。
手動:以root身份執行/usr/local/mysql/bin/mysqld_safe --user=mysql
windows下:
自動:
用cmd方式,到mysql安裝路徑的bin檔案夾下,執行:mysqld-nt --install
手動:直接到到mysql安裝路徑的bin檔案夾下執行net start mysql即可。
如果不想讓mysql在電腦啟動時候就啟動服務,執行:mysqld-nt --remove
也可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中刪除對應服務並重啟電腦。
關閉mysql:mysqladmin -uroot -p shutdown
啟動mysql:
mysqld-nt --install
net start mysql
Q:如何修改mysql的使用者密碼?
A :在這裡請區分串連mysql資料庫的使用者密碼和系統的使用者密碼!!
mysql -uroot -p
輸入密碼
#登入mysql
>use mysql
>update user set password=password("new_pass") where user="userName"; #userName換成你要修改的使用者名稱的密碼,比如root
>flush privileges;
>exit;
Q:如何登入mysql?
A:mysql -uroot -p斷行符號後,輸入密碼,再斷行符號即可。如果自己沒有修改的話,預設密碼為空白。
Q:mysql如何很好的變成圖形化資料庫呢?自身有內建的圖形化工具沒有?
A:mysql內建一個字元的用戶端,但是還有好多的像mysql_center、SQLyog、phpMyAdmin、Mysql Query Browser,Mysql Administrator、mysqlcc這樣好的圖形管理工具。
mysql_centerd在本站的:http://bbs.mysql.cn/thread-517-1-1.html
SQLyog去網上搜尋,很多的,SQLyog407版本不錯。
phpMyAdmin:http://download.mysql.cn/opencode/2006/0207/55.html
mysql.com提供的管理軟體:http://dev.mysql.com/downloads/gui-tools/5.0.html
其它的我就不一一提供,自己到網上搜尋下載。
Q:為什麼用mysql -uusername -p登入mysql伺服器時出現如下提示:
Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server!("xxx.xxx.xxx.xxx"代表要登入的伺服器)
A:這是因為你要登入的mysql伺服器不允許使用者username從xxx.xxx.xxx.xxx這個ip地址登入。
解決辦法是在伺服器登入mysql,操作步驟為:
mysql -uroot -p
(輸入密碼)
use mysql
update user set Host="%" where User="username";
flush privileges;
Q:什麼是phpMyAdmin?
A:phpMyAdmin 是一個用PHP編寫的,可以通過互連網控制和操作MySQL。通過phpMyAdmin可以完全對資料庫進行操作,例如建立、複製/刪除資料等等。
有了phpMyAdmin 就可以完全不使用mysql命令,直接使用phpMyAdmin就能管理mysql的所有資料和資料庫
Q:如何使用phpMyAdmin?
A:要使用phpMyAdmin,下載後,把它釋放到web伺服器的根目錄下,取個名字,比如就叫phpMyAdmin,然後在瀏覽器的地址欄輸入:
http://X.X.X.X/phpMyAdmin/index.php
就可以了。
如果是phpMyAdmin 2.8.0.2以上版本的,這樣使用會報錯,因為預設沒有這個軟體需要的設定檔config.default.php,在2.6.X版本下都有這個檔案,只是口令不對。對於2.6.X版本的,可以直接用文字編輯器開啟這個檔案,把其中第一個$cfg中內容修改成自己的使用者名稱及密碼就可以了:
$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = '自己的密碼';
不設定密碼的話,系統會提示:
Access denied for user 'root'@'localhost' (using password: NO)
如果是2.8.0.2版本的,程式會提示請運行scripts/setup.php或者index.php這樣的檔案進行配置以產生config.inc.php檔案。
Q:為什麼我使用mysql出現亂碼?
A:安裝mysql5時預設的字元集是瑞典編碼latin1,不支援中文。並且出現亂碼的原因很多,建議到bbs.mysql.cn論壇尋找答案。發貼的話請詳細說明自己的環境、安裝過程及使用的資訊,以便大家能快速分析你的問題。
Q:如何修改字元集?
A:
mysql -uroot -p
輸入密碼
選擇你的目標資料庫
mysql> use dbname
顯示當前字元集
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
7 rows in set (0.00 sec)
最好是保持字元集統一。如果你要修改哪個字元集,用set命令,如:
mysql> set character_set_client gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gbk |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
再改回來:
mysql> set character_set_client=gb2312;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
7 rows in set (0.00 sec)
自己試試就知道了。
Q:為什麼我的phpmyadmin提示不能載入mysql擴充?
A: 一、看下你的PHP目錄和PHP\EXT下有沒有php_mysql.dll這個檔案。
二、配製一下環境變數把php_mysql.dll所在的目錄加入的PATH裡。
三、有的php安裝程式安裝好以後,在安裝路徑下,並沒有ext檔案夾(不知道為什麼),最好下載個配置的php,然後,將exe檔案夾拷貝到安裝目錄下,再進行相應的配置。
四、看一下c:\winnt 或者是 c:\windows下的php.ini檔案裡的php_mysql.dll前面的;(分號)是否去掉了,如果沒有去掉請去掉,然後,將mysql安裝路徑下bin檔案夾下的libmysql.dll放在安裝php的根目錄一般為C:\php ,同時也在 C:\windows 下也放各一個,之後重新啟動IIS或者是APACHE。有的時候總是重新整理一頁,即使去掉分號也還是不能載入mysql擴充,最後新開啟一個視窗,再試。
Q:為什麼提示:"沒有發現 PHP 的擴充設定mbstring, 而當前系統好像在使用寬字元集。沒有 mbstring 擴充的 phpMyAdmin 不能正確識別字串,可能產生不可意料的結果."
A:因為你沒有開啟mbstring在擴充,解決辦法:開啟php的設定檔php.ini,將
extension=php_mbstring.dll前面的分號";"去掉,並改到正確的路徑,一般為
ext/php_mbstring.dll
Q:為什麼PHP串連mysql會有下面的提示?
Fatal error: Call to undefined function mysql_connect() ……
A:很有可能是沒有載入mysql擴充,如何解決,請參考上面的方法。
因為如果你的系統沒有載入mysql擴充的話,phpmyadmin能給出提示,而一般的程式則不能給出。
如果phpmyadmin沒有給出提示,而你恰好用的apache伺服器,嘗試一下方法:
首先是去掉;extension=php_mysql.dll前面的“;”(;為注釋)
第二步是將C:\php\ext中的php_mysql.dll複製到C:\WINDOWS(C:\WINNT)中即可,
並重起Apache。
Q:為什麼我不能看孵化池資料?
A:MYSQL.CN的孵化池是專門為初學者提供學習的地方,這裡我就不多介紹了,詳情請訪問:http://bbs.mysql.cn/thread-369-1-1.html。
Q:能中文資料庫名稱嗎?
A:可以,但是不推薦,用起來不方便。
Q:如果我忘記了root密碼,怎麼辦?
A:
在windows下:
開啟命令列視窗,停止mysql服務: Net stop mysql
啟動mysql,一般到mysql的安裝路徑,找到 mysqld-nt.exe
執行:mysqld-nt --skip-grant-tables
另外開啟一個命令列視窗,執行mysql
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
>exit
用Ctrl+Alt+Del,找到mysqld-nt的進程殺掉它,在重新啟動mysql-nt服務,就可以用新密碼登入了
在linux下:
如果 MySQL 正在運行,首先殺之: killall -TERM mysqld。
啟動 MySQL :bin/safe_mysqld --skip-grant-tables &
就可以不要求輸入密碼就進入 MySQL 了。
然後就是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
重新殺 MySQL ,用正常方法啟動 MySQL 。
Q:為什麼出現如下的提示:
[root@0-8-2-df-fa-ee ~]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
註:也可能是其它路徑下的mysql.sock
A:說明mysql服務沒有啟動,mysql.sock是mysql服務啟動後啟動產生的檔案,
一般先殺掉mysql服務:killall mysql
然後,再根據自己的安裝情況啟動mysql即可。比如,安裝的時候,用的是
./configure --prefix=/usr/local/mysql的
用下面的命令啟動:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
之後再去執行/usr/local/mysql/bin/mysql -u root -p 登入進入mysql資料庫
還不行的話,一次執行下面的命令:
sync
reboot ;重啟電腦,執行時請小心!!!
Q:為什麼出現下面的錯誤
#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
A:你使用的資料庫是4.1以上,用命令列串連MySQL資料庫後,執行下面的命令:
UPDATE mysql.user SET password=OLD_PASSWORD("your_password") WHERE Host="your_host" AND User="your_username" ;
即可解決。
your_password:改成你串連資料庫的密碼,比如 123
your_host:改成你串連資料庫的主機,如果是本地的話,就是localhost
your_username:改成你串連資料庫的使用者,比如 root
Q:為什麼mysql提示我:Data too long for column ……
A:首先確保你的資料大小符合你的欄位大小。
再檢查你的資料庫編碼,資料庫的編碼是否與操作資料庫工具的編碼一致!
Q:為什麼我修改wait_timeout沒有生效
A: 需要同時修改
interactive_timeout
wait_timeout
才會生效(show variables;)
來源:http://www.blogjava.net/baoyaer/articles/209466.html