mysql腳本執行
呵呵~前幾天剛搞好這個...
分兩個BAT(1.bat,2.bat)~~當然可以連起來~BAT路徑自己修改
1.bat內容以下
D:\wamp\bin\mysql\mysql5.5.8\bin\mysql -uroot -p < D:\wamp\www\mysqlCreatDB.sql
2.bat
mysqlCreatDB.sql內容為:create database 「自己資料庫名字」
2.bat內容以下
@ECHO off
set user=root
set pass=
set wdb=gx
set port=3306
set server=localhost
@ECHO 正在安裝資料庫....
D:\wamp\bin\mysql\mysql5.5.8\bin\mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% < D:\wamp\www\自己導出的SQL文件
@ECHO 安裝完畢
❷ mysql是用的.sh寫的腳本,執行後提示沒有命令
在Shell中執行mysql的腳本,這里介紹比較容易使用的一種方法
首先寫好sql的腳本,後綴為.sql,比如
sql_file.sql:內容如下
#這是SQL的腳本
create table if not exists test_sql(id int(10),name varchar(20));
insert into test_sql values(1,'正餐');
select * from test_sql;
很簡單的創建、插入、查詢
之後shell的腳本,內容如下
#!/bin/bash #這是執行SQL的腳本,傳入資料庫表,和SQL文件名即可
name=$1
file_name=$2
cd /opt/lampp/bin ./mysql -uroot -p123456 <<EOF
use ${name};
source ${file_name};
EOF
./mysql -uroot -p123456是進入mysql的命令,前面的路徑可以改成自己的絕對路徑
<< EOF EOF 中間可以寫出任意的mysql腳本
其中,如果要執行某個.sql的命令,直接用 source 腳本.sql 即可執行該腳本上面的命令,這里使用的是source sql_file.sql
此外,如果在mysql中需要執行shell腳本
可以在EOF中 ./mysql -uroot -p123456<<EOF \! sh shell.sh EOF
前面加上 !\ +linux中執行的shell命令即可
❸ 如何查看mysql運行腳本文件
sql腳本是包含一到多個sql命令的sql語句,我們可以將這些sql腳本放在一個文本文件中(我們稱之為「sql腳本文件」),然後通過相關的命令執行這個sql腳本文件。基本步驟如下:
1、創建包含sql命令的sql腳本文件
文件中包含一些列的sql語句,每條語句最後以;結尾,文件內容示例如下:
--創建表,使用「--」進行注釋
create table 表名稱
(
Guid Varchar(38) not null primary key,
Title Varchar(255),
❹ 如何執行一個mysql的sql腳本文件
基本步驟如下:
一、創建包含sql命令的sql腳本文件
文件中包含一系列的sql語句,每條語句最後以;結尾,假設文件名為ss.sql,文件內容示例如下(使用「--」進行注釋):--創建表create table 表名稱(Guid Varchar(38) not null primary key,
Title Varchar(255),
) TYPE=InnoDB;--在表A中增加欄位Status
alter table A add Status TinyInt default '0';--在表A上創建索引
create index XX_TaskId_1 on A(Id_);
--在A表中添加一條記錄
Insert into A (Id,ParentId, Name) values(1,0,'名稱');
--添加、修改、刪除數據後,有可能需要提交事務
Commit;二、執行sql腳本文件方法一 使用cmd命令執行(以windows為例,unix或linux的在其類似的控制台下運行)
格式:【Mysql的bin目錄】\mysql –u用戶名 –p密碼 –D資料庫<【sql腳本文件路徑全名】
示例:D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql注意事項:1、如果在sql腳本文件中使用了use 資料庫,則-D資料庫選項可以忽略
2、如果【Mysql的bin目錄】中包含空格,則需要使用「」包含,如:
「C:\Program Files\mysql\bin\mysql」 –u用戶名 –p密碼 –D資料庫<【sql腳本文件路徑全名】
3、如果需要將執行結果輸出到文件,可以採用以下模式
D:\mysql\bin\mysql –uroot –p123456 -Dtest<d:\test\ss.sql>d:\dd.txt
方法二 進入mysql的控制台後,使用source命令執行
1、進入mysql控制台
D:\mysql\bin\mysql –uroot –p123456 -Dtest
2、執行sql腳本文件
❺ 進入mysql控制台後執行sql腳本的方法
使用source命令執行sql腳本。
進入mysql的控制台後,使用source命令執行
Mysql>source
【sql腳本文件的路徑全名】
具體步驟:
假設運行sql腳本是hello.sql,在控制台下輸入:
mysql>source
c:\hello
world\hello.sql(注意路徑不用加引號)
或者
\.
c:\hello
world\hello.sql
然後回車即可
❻ mysql命令行工具如何執行腳本文件
mysql
-u
root
-p
#輸入root密碼
如果這個SQL里有
create
database
member;
這句,那麼直接執行下面的語句,如果沒有,那麼你需要先
create
database
member;
use
member;
再執行下面的語句
source
/xxx/create_db_member.sql
❼ mysql如何執行sql腳本文件
mysql
–u用戶名–p密碼
–D資料庫<【sql腳本文件路徑全名】,示例:mysql
–uroot
–p11111
-Dtest注意:A、如果在sql腳本文件中使用了use
資料庫,則-D資料庫選項可以忽略B、如果【Mysql的bin目錄】中包含空格,則需要使用「」包含,如:「C:\Program
Files\mysql\bin\mysql」
–u用戶名
–p密碼–D資料庫<【sql腳本文件路徑全名】方法二
進入mysql的控制台後mysql>source
sql腳本路徑
❽ linux shell腳本執行mysql mysql資料庫在遠程伺服器上
方法一、適合所有格式的mysql資料庫,通過對資料庫導出導進寫個腳本定時執行:
1.導出整個資料庫 mysqlmp -u 用戶名 -p 資料庫名 > 導出的文件名 mysqlmp -u wcnc -p smgp_apps_wcnc > /存放路徑/wcnc.sql
2.導出一個表 mysqlmp -u 用戶名 -p 資料庫名 表名> 導出的文件名 mysqlmp -u wcnc -p smgp_apps_wcnc users> /存放路徑/wcnc_users.sql
3.導出一個資料庫結構 mysqlmp -u wcnc -p -d --add-drop-table smgp_apps_wcnc >/存放路徑/wcnc_db.sql
定義:
-d 沒有數據
--add-drop-table 在每個create語句之前增加一個drop table
4.導入資料庫 常用source 命令 進入mysql資料庫控制台:
如mysql -u root -p mysql>use 資料庫
方法二、針對mysql數據表格式為MyISAM的
假如數據文件在/var/lib/mysql
那麼直接寫個腳本
cp -r /var/lib/mysql /備份到的文件夾路徑
隔機備份用rsync增量,或定時完整備份。
❾ 如何提高mysql腳本執行速度
看了一個優化案例覺的挺有代表性,這里記錄下來做一個標記,來紀念一下隨便的欄位定義的問題。
回憶一下,在表的設計中很多人習慣的把表的結構設計成Varchar(64),Varchar(255)之類的,雖然大多數情況只存了5-15個位元組.那麼我看一下下面這個案例.
查詢語句:
?1 SELECT SQL_NO_CACHE channel, COUNT(channel) AS visitors FROM xxx_sources WHERE client_id = 1301 GROUP BY client_id, channel;該表(client_id,channel)是一個組合索引.
利用explain,看一下執行計劃,對於索引使用上看上非常完美?1234567 mysql> explain SELECT SQL_NO_CACHE channel, COUNT(channel) AS visitors FROM xxx_sources WHERE client_id = 1301 GROUP BY client_id, channel; +----+-------------+-------------+-------+--------------------+--------------------+---------+------+----------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------+-------+--------------------+--------------------+---------+------+----------+--------------------------+ | 1 | SIMPLE | xxx_sources | index | idx_client_channel | idx_client_channel | 1032 | NULL | 20207319 | Using where; Using index | +----+-------------+-------------+-------+--------------------+--------------------+---------+------+----------+--------------------------+ 1 row in set (0.00 sec)看一下實際執行:
?1234567 mysql> SELECT SQL_NO_CACHE channel, COUNT(channel) AS visitors FROM xxx_sources WHERE client_id = 1301 GROUP BY client_id, channel; +---------+----------+ | channel | visitors | +---------+----------+ | NULL | 0 | +---------+----------+ 1 row in set (11.69 sec)實際執行的情況非常的糟糕.傳通的想法,這個執行從索引上執行計劃上看非常完美了,好象和MySQL沒什麼關系了. 在去看一下表的設計會發現client_id也是設計成了varchar(255).看到這里不防可以使用下面的方法試一下:
?1234567 mysql> explain SELECT SQL_NO_CACHE channel, COUNT(channel) AS visitors FROM xxx_sources WHERE client_id = '1301' GROUP BY client_id, channel; +----+-------------+-------------+------+--------------------+--------------------+---------+-------+--------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------+------+--------------------+--------------------+---------+-------+--------+--------------------------+ | 1 | SIMPLE | xxx_sources | ref | idx_client_channel | idx_client_channel | 258 | const | 457184 | Using where; Using index | +----+-------------+-------------+------+--------------------+--------------------+---------+-------+--------+--------------------------+ 1 row in set (0.00 sec)從執行計劃上來看,差不多,但實際差多了.具體上來看key_len從1032降到了258,執行計劃變成了const基於等於的查找,行數從原來千萬級到了十萬級了.不算也能明白IO節省了很多.
再來看實際執行:
?1234567 mysql> SELECT SQL_NO_CACHE channel, COUNT(channel) AS visitors FROM xxx_sources WHERE client_id = '1301' GROUP BY client_id, channel; +---------+----------+ | channel | visitors | +---------+----------+ | NULL | 0 | +---------+----------+ 1 row in set (0.25 sec)哇,從11.69秒變成了0.25秒,這是什麼概念,優化了多少倍,算一下吧.
看到這里在想什麼呢,記住這個案例,嗯,不錯,以後還可以加引號優化一下.那為什麼不問一下,能不能在優化了,為什麼會這樣呢?
我們先來看一下第一個問題:
能不能在優化了?
答案是當然可以了.從索引的長度上來看258還是一個非常大的數據,對於client_id這個欄位從名字上來看,也只會存數據型的值,那為什麼不用的一個int unsigned去存呢,索引的長度馬上會從258降到4。這樣不是又節省了很多嗎?
接下來看一下第二個問題,為什麼會這樣呢?
原因有兩點,同時基於一個原則,基於成本的優化器。對於client_id在表的定義時定義成了字元型的值,在查詢時傳入了數值型的值,需要經過一個數值轉換,悲劇的開始,最終導致MySQL選擇了一個完成的索引去掃描。
從這個案例上,我們需要注意什麼呢?
合理的選擇數據類型,基本工太重要了,就這叫贏在起跑線,一切都不能隨便了,別把一個表定義成了降了主建外其它全是Varchar(255)。對資料庫的double/float這種欄位做索引時一定要小心。
❿ MySql怎樣跟蹤SQL腳本執行
其實方法很簡單,開啟mysql的日誌log功能,通過查看跟蹤日誌即可。
開啟mysql的日誌log方法:
windows環境下的配置方法:
我使用的版本:Version: 5.0.37-community-nt-log (MySQL Community Edition (GPL))
找到my.ini,我的是在「G:\Program Files (x86)\MySQL\MySQL Server 5.0」目錄下,
找到[mysqld],在下面添加:
log=存放日誌的路徑/my.log