Script executeren (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(Een tussenliggende versie door dezelfde gebruiker niet weergegeven)
Regel 44: Regel 44:
  
 
  mysql --execute "show databases;"
 
  mysql --execute "show databases;"
 +
 +
== Meerdere strings executeren vanaf bash ==
 +
 +
Het kan! [https://www.shellhacks.com/mysql-run-query-bash-script-linux-command-line/]. Voorbeeld:
 +
 +
<pre>
 +
echo "Create labels..."
 +
sql="use dwh; call kbo_label('"$site_db_name"');"
 +
mysql <<EOF
 +
$sql
 +
EOF
 +
</pre>
 +
 +
Hier wordt alles tot aan het keyword "EOF" geëxecuteerd.
  
 
== Zie ook ==
 
== Zie ook ==
Regel 54: Regel 68:
 
* https://dev.mysql.com/doc/refman/5.7/en/command-line-options.html
 
* https://dev.mysql.com/doc/refman/5.7/en/command-line-options.html
 
* https://dev.mysql.com/doc/refman/8.0/en/mysql-batch-commands.html
 
* https://dev.mysql.com/doc/refman/8.0/en/mysql-batch-commands.html
 +
* https://www.shellhacks.com/mysql-run-query-bash-script-linux-command-line/

Huidige versie van 8 jun 2019 om 11:05

De mysql-client is bedoeld voor interactief gebruik, maar je kunt er ook scripts (bestanden met SQL-commando's) mee uitvoeren.

Gebruikelijke syntaxis:

mysql -u username -ppassword -h db_name < script_file

of

mysql -u username -ppassword -e executiestring

Als je een .my.cnf-bestand aanmaakt (zie Installatie MySQL), dan kun je de credentials achterwege laten (heel erg prettig!):

mysql db_name < script_file

Indien het eerste statement in het bestand een use db_name-commando is, kan het ook zo:

mysql < script_file

Je kunt scriptbestanden ook executeren vanuit mysql:

source bestandsnaam

of

\. bestandsnaam

Feedback

Er zijn in ieder geval twee manieren om feedback te krijgen tijdens executie van een script.

Verbose

De eerste methode is middels --verbose. Bv.:

mysql < script-010-dwh-main.sql --verbose

Select-statements

De tweede methode is, door select-statements op te nemen in het script. Net als debuggen dus. Waarschijnlijk Niet altijd even practisch.

Direct strings executeren

Bv.:

mysql --execute "show databases;"

Meerdere strings executeren vanaf bash

Het kan! [1]. Voorbeeld:

echo "Create labels..."
sql="use dwh; call kbo_label('"$site_db_name"');"
mysql <<EOF
	$sql
EOF

Hier wordt alles tot aan het keyword "EOF" geëxecuteerd.

Zie ook

Bronnen