4. Using MySQL client through batch job system

The MySQL client program can be used in the batch job systems in the same way as in interactive client usage. The only difference is that in the batch jobs, the database password can't be given interactively. Instead it should be given by using MySQL configuration file (.my.cnf) in the home directory.

Below is a sample MySQL script for Taito. First we need to create a MySQL connection configuration file that locates in the home directory.  In this case we use user account mydb1_admin, whose password is abc123.  The file, named as .my.cnf, would now look like following:
 

[client]
user =  mydb1_admin
password = abc123
host = kaivos.csc.fi


Then we create the actual batch job script. The script below reserves 12 h time and 1 GB memory to run the MySQL query that is defined in the file query_commands.sql. The query is made to database mydb1 and the connection parameters are read from file .my.cnf. The results are written to the results.txt file.

#!/bin/bash -l
#SBATCH -J mysql_job
#SBATCH -o output_%j.txt
#SBATCH -e errors_%j.txt
#SBATCH -t 12:00:00
#SBATCH -n 1
#SBATCH --mail-type=END
#SBATCH --mail-user=kkayttaj@uni.fi
#SBATCH -p serial
#SBATCH --mem-per-cpu=1024

module load mysql
cd $WRKDIR/my_data

mysql --local mydb1 <query_commands.sql > results.txt
 

 

Example : Using MySQL database from a batch job script in Taito

The MySQL database in kaivos.csc.fi is intended for cases where computing servers of CSC use the MySQL database to store and analyze data. In these cases the database is normally not used interactively, but the MySQL client is used automatically from a shell or program script. 

Below is a a sample mysql session where database called DB_A is accessed using the database user account DB_A_admin  and password abc123.  This user account information is first stored into .my.cnf in home directory:

[client]
user =  DB_A_admin
password = abc123
host = kaivos.csc.fi

Below is a sample batch job script, called as kaivos.bash,  that utilizes kaivos.csc.fi within the batch queue system.
#!/bin/bash -l
#SBATCH -J mysql_job
#SBATCH -o output_%j.txt
#SBATCH -e errors_%j.txt
#SBATCH -t 12:00:00
#SBATCH -n 1
#SBATCH -p serial
#SBATCH --mail-type=END
#SBATCH --mail-user=kkayttaj@uni.fi
#SBATCH --mem-per-cpu=1024
#load mysql environment
module load mysql

#go to the right directory
cd datadir

# run the analysis
my_program < inputfile30.data > results.30

#feed the data to the database
mysqlimport --local --compress DB_A results.30

#change the status value in the dataset_table
mysql --local DB_A <<EOF
   update dataset_table set status="done" where name="inputfile30.data" ;
EOF

#remove the original results file
rm –f results.30


The sample script above first analyzes a file called inputfile30.data with program my_program. The results are first written to file called results.30. The data in this file is then imported to a database with mysqlimport command. Note that the script assumes that a table called results already exists in the database DB_A and that the columns in the results file are in the same order as in the database table.

After importing the data to the database the script launches another MySQL command. The second command modifies an existing table called dataset_table. The mysql command changes the status value in this table so that in the row where the name column contains the value inputfile30.data, the status column gets the value:  done.

The kaivos.bash script, described above, can be submitted to the batch job system of Taito with command

sbatch kaivos.bash

 

  Previous chapter     One level up     Next chapter