MySQL Database Backup Script

Here I  have given command to take backup of all database in one file

# mysqldump -u root -p --all-databases > all_dbs.sql
If you want to take backup all database in separate file with automatic retention and email alert you can use below shell script.

#!/bin/bash
#==============================================================================
#TITLE: mysql_backup.sh
#DESCRIPTION: script for automating the daily mysql backups
#USAGE: ./mysql_backup.sh
#CRON:

# example cron for daily db backup @ 9:15 am
# min hr mday month wday command
# 15 9 * * * /Users/[your user name]/scripts/mysql_backup.sh

#RESTORE FROM BACKUP
#$ gunzip < [backupfile.sql.gz] | mysql -u [uname] -p[pass] [dbname]
#==============================================================================
# CUSTOM SETTINGS
#==============================================================================
# directory to put the backup files
BACKUP_DIR=/backup/mysqlbkp

# MYSQL Parameters
MYSQL_UNAME=backup
MYSQL_PWORD=B@ckUp@1@3

# Email Parameters
MAIL="mail1.example.com", "mail2.example.com"
MAILER="$(which mail)"
STATUSFILE="/tmp/statusfile.txt"

# Don't backup databases with these names
# Example: starts with mysql (^mysql) or ends with _schema (_schema$)
IGNORE_DB="(^mysql|_schema$)"

# include mysql and mysqldump binaries for cron bash user
PATH=$PATH:/usr/local/mysql/bin
# Number of days to keep backups
KEEP_BACKUPS_FOR=2 #days
#==============================================================================
# METHODS
#==============================================================================
# YYYY-MM-DD

TIMESTAMP=$(date +%F)
function delete_old_backups()
{
echo "Deleting $BACKUP_DIR/*.sql.gz older than $KEEP_BACKUPS_FOR days"
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$KEEP_BACKUPS_FOR -exec rm {} \;
}

function mysql_login() {
local mysql_login="-u $MYSQL_UNAME"
if [ -n "$MYSQL_PWORD" ]; then
local mysql_login+=" -p$MYSQL_PWORD"
fi
echo $mysql_login
}

function database_list() {
local show_databases_sql="SHOW DATABASES WHERE \`Database\` NOT REGEXP '$IGNORE_DB'"

echo $(mysql $(mysql_login) -e "$show_databases_sql"|awk -F " " '{if (NR!=1) print $1}')
}

function echo_status(){
printf '\r';
printf ' %0.s' {0..100}
printf '\r';
printf "$1"'\r'
}


function backup_database(){
backup_file="$BACKUP_DIR/$TIMESTAMP.$database.sql.gz" > $STATUSFILE
output+="$database => $backup_file\n"
echo_status "...backing up $count of $total databases: $database" >> $STATUSFILE
$(mysqldump $(mysql_login) $database | gzip -9 > $backup_file)
}

function backup_databases(){
local databases=$(database_list)
local total=$(echo $databases | wc -w | xargs)
local output=""
local count=1
for database in $databases; do
backup_database
local count=$((count+1))
done
echo -ne $output | column -t >> $STATUSFILE
}

function hr(){
printf '=%.0s' {1..100}
printf "\n"
}
#==============================================================================
#Run Rsync After Backup
#To sync first configure password less ssh from source to destination server
#==============================================================================
echo_status "Start rsync to destination server" >> $STATUSFILE
rsync /backup/mysqlbkp/* -ave "ssh -c arcfour -p 2255" --recursive --delete-during root@10.0.0.1:/home/mysql_Backup_10SRV >> $STATUSFILE
echo_status "complete rsync to destination server" >> $STATUSFILE
#==============================================================================
# RUN SCRIPT
#==============================================================================
delete_old_backups
hr
backup_databases
hr
printf "All backed up!\n\n" >> $STATUSFILE
$MAILER -s "MySQL Database Backup report for 10.10.10.1 $NOW" -- $MAIL < $STATUSFILE
rm $STATUSFILE

MySQL Database Backup Script

Here I  have given command to take backup of all database in one file

# mysqldump -u root -p --all-databases > all_dbs.sql
If you want to take backup all database in separate file with automatic retention and email alert you can use below shell script.

#!/bin/bash
#==============================================================================
#TITLE: mysql_backup.sh
#DESCRIPTION: script for automating the daily mysql backups
#USAGE: ./mysql_backup.sh
#CRON:

# example cron for daily db backup @ 9:15 am
# min hr mday month wday command
# 15 9 * * * /Users/[your user name]/scripts/mysql_backup.sh

#RESTORE FROM BACKUP
#$ gunzip < [backupfile.sql.gz] | mysql -u [uname] -p[pass] [dbname]
#==============================================================================
# CUSTOM SETTINGS
#==============================================================================
# directory to put the backup files
BACKUP_DIR=/backup/mysqlbkp

# MYSQL Parameters
MYSQL_UNAME=backup
MYSQL_PWORD=B@ckUp@1@3

# Email Parameters
MAIL="mail1.example.com", "mail2.example.com"
MAILER="$(which mail)"
STATUSFILE="/tmp/statusfile.txt"

# Don't backup databases with these names
# Example: starts with mysql (^mysql) or ends with _schema (_schema$)
IGNORE_DB="(^mysql|_schema$)"

# include mysql and mysqldump binaries for cron bash user
PATH=$PATH:/usr/local/mysql/bin
# Number of days to keep backups
KEEP_BACKUPS_FOR=2 #days
#==============================================================================
# METHODS
#==============================================================================
# YYYY-MM-DD

TIMESTAMP=$(date +%F)
function delete_old_backups()
{
echo "Deleting $BACKUP_DIR/*.sql.gz older than $KEEP_BACKUPS_FOR days"
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$KEEP_BACKUPS_FOR -exec rm {} \;
}

function mysql_login() {
local mysql_login="-u $MYSQL_UNAME"
if [ -n "$MYSQL_PWORD" ]; then
local mysql_login+=" -p$MYSQL_PWORD"
fi
echo $mysql_login
}

function database_list() {
local show_databases_sql="SHOW DATABASES WHERE \`Database\` NOT REGEXP '$IGNORE_DB'"

echo $(mysql $(mysql_login) -e "$show_databases_sql"|awk -F " " '{if (NR!=1) print $1}')
}

function echo_status(){
printf '\r';
printf ' %0.s' {0..100}
printf '\r';
printf "$1"'\r'
}


function backup_database(){
backup_file="$BACKUP_DIR/$TIMESTAMP.$database.sql.gz" > $STATUSFILE
output+="$database => $backup_file\n"
echo_status "...backing up $count of $total databases: $database" >> $STATUSFILE
$(mysqldump $(mysql_login) $database | gzip -9 > $backup_file)
}

function backup_databases(){
local databases=$(database_list)
local total=$(echo $databases | wc -w | xargs)
local output=""
local count=1
for database in $databases; do
backup_database
local count=$((count+1))
done
echo -ne $output | column -t >> $STATUSFILE
}

function hr(){
printf '=%.0s' {1..100}
printf "\n"
}
#==============================================================================
#Run Rsync After Backup
#To sync first configure password less ssh from source to destination server
#==============================================================================
echo_status "Start rsync to destination server" >> $STATUSFILE
rsync /backup/mysqlbkp/* -ave "ssh -c arcfour -p 2255" --recursive --delete-during root@10.0.0.1:/home/mysql_Backup_10SRV >> $STATUSFILE
echo_status "complete rsync to destination server" >> $STATUSFILE
#==============================================================================
# RUN SCRIPT
#==============================================================================
delete_old_backups
hr
backup_databases
hr
printf "All backed up!\n\n" >> $STATUSFILE
$MAILER -s "MySQL Database Backup report for 10.10.10.1 $NOW" -- $MAIL < $STATUSFILE
rm $STATUSFILE

Change MySQL Database Location

Move MySQL database from one drive to another

Description:
Here I have describe how to move MySQL database from one drive to another when drive full or need to change hard drive.
Procedure:
      1>     Shutdown MySQL service using below command:
       # service mysqld stop
      2>    Check mysql process using below command and if any process running then kill process
      # ps aux |grep mysql
      3>     Move all contents of /var/lib/mysql [Data Dir] content to new location for this demo I create     /database directory
      4>     Change datadir attribute in my.cnf [MySQL configuration file] as follow. Generally it is located on /etc/my.cnf or /etc/mysql/my.cnf
[mysqld]
Datadir = /database
       5>     Give mysql user ownership to /database directory and give 755 permission on /database directory
       6>   Rename  /var/lib/mysql directory with new name

       7>     Start service using below command:

       # service mysqld start

MySql Basic Commands

1>    Login MySQL Console

# [mysql dir]mysql  -u username -p

2>    Create a database on the sql server.

mysql> create database [databasename];

3>    List all databases on the sql server.

mysql> show databases;

4>    Switch to a database.

mysql> use [db name];

5>    To see all the tables in the db.

mysql> show tables;

6>    To see database’s field formats.

mysql> describe [table name];

7>    To delete a db.

mysql> drop database [database name];

8>    To delete a table.

mysql> drop table [table name];

9>    Show all data in a table.

mysql> SELECT * FROM [table name];

10>Returns the columns and column information pertaining to the designated table.

mysql> show columns from [table name];

11>Show certain selected rows with the value “whatever”.

mysql> SELECT * FROM [table name] WHERE [field name] = “whatever”;

12>Show all records containing the name “Bob” AND the phone number ’3444444′.

mysql> SELECT * FROM [table name] WHERE name = “Bob” AND phone_number = ’3444444′;

13>Show all records not containing the name “Bob” AND the phone number ’3444444′ order by the phone_number field.

mysql> SELECT * FROM [table name] WHERE name != “Bob” AND phone_number = ’3444444′ order by phone_number;

14>Show all records starting with the letters ‘bob’ AND the phone number ’3444444′.

mysql> SELECT * FROM [table name] WHERE name like “Bob%” AND phone_number = ’3444444′;

15>Show all records starting with the letters ‘bob’ AND the phone number ’3444444′ limit to records 1 through 5.

mysql> SELECT * FROM [table name] WHERE name like “Bob%” AND phone_number = ’3444444′ limit 1,5;

16>Use a regular expression to find records. Use “REGEXP BINARY” to force case-sensitivity. This finds any record beginning with a.

mysql> SELECT * FROM [table name] WHERE rec RLIKE “^a”;

17>Show unique records.

mysql> SELECT DISTINCT [column name] FROM [table name];

18>Show selected records sorted in an ascending (asc) or descending (desc).

mysql> SELECT [col1],[col2] FROM [table name] ORDER BY [col2] DESC;

19>Return number of rows.

mysql> SELECT COUNT(*) FROM [table name];

20>Sum column.

mysql> SELECT SUM(*) FROM [table name];

21>Join tables on common columns.

mysql> select lookup.illustrationid, lookup.personid,person.birthday from lookup left join person on lookup.personid=person.personid=statement to join birthday in person table with primary illustration id;

22>Creating a new user. Login as root. Switch to the MySQL db. Make the user. Update password.

# mysql -u root -p
mysql> use mysql;
mysql> INSERT INTO user (Host,User,Password) VALUES(‘%’,’username’,PASSWORD(‘password’));
mysql> flush privileges;

23>Change a user’s password from unix shell.

# [mysql dir]/bin/mysqladmin -u username -h hostname.blah.org -p password ‘new-password’

24>Change a user’s password from MySQL prompt. Login as root. Set the password. Update password.

# mysql -u root -p
mysql> SET PASSWORD FOR ‘user’@’hostname’ = PASSWORD(‘passwordhere’);
mysql> flush privileges;

Recover a MySQL root password. Stop the MySQL server process. Start again with no grant tables. Login to MySQL as root. Set new password. Exit MySQL and restart MySQL server.

# /etc/init.d/mysql stop
# mysqld_safe –skip-grant-tables &
# mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD(“newrootpassword”) where User=’root’;
mysql> flush privileges;
mysql> quit
# /etc/init.d/mysql stop
# /etc/init.d/mysql start

25>Set a root password if there is on root password.

# mysqladmin -u root password newpassword

26>Update a root password.

# mysqladmin -u root -p oldpassword newpassword

27>Allow the user “bob” to connect to the server from localhost using the password “passwd”. Login as root. Switch to the MySQL db. Give privs. Update privs.

# mysql -u root -p
mysql> use mysql;
mysql> grant usage on *.* to bob@localhost identified by ‘passwd’;
mysql> flush privileges;

28>Give user privilages for a db. Login as root. Switch to the MySQL db. Grant privileges. Update privileges.

# mysql -u root -p
mysql> use mysql;
mysql> INSERT INTO user (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES (‘%’,’databasename’,’username’,’Y’,’Y’,’Y’,’Y’,’Y’,’N’);
mysql> flush privileges;
or
mysql> grant all privileges on databasename.* to username@localhost;
mysql> flush privileges;

29>To update info already in a table.

mysql> UPDATE [table name] SET Select_priv = ‘Y’,Insert_priv = ‘Y’,Update_priv = ‘Y’ where [field name] = ‘user’;

30>Delete a row(s) from a table.

mysql> DELETE from [table name] where [field name] = ‘whatever’;

31>Update database permissions/privilages.

mysql> flush privileges;

32>Delete a column.

mysql> alter table [table name] drop column [column name];

33>Add a new column to db.

mysql> alter table [table name] add column [new column name] varchar (20);

34>Change column name.

mysql> alter table [table name] change [old column name] [new column name] varchar (50);

35>Make a unique column so you get no dupes.

mysql> alter table [table name] add unique ([column name]);

36>Make a column bigger.

mysql> alter table [table name] modify [column name] VARCHAR(3);

37>Delete unique from table.

mysql> alter table [table name] drop index [colmn name];

38>Load a CSV file into a table.

mysql> LOAD DATA INFILE ‘/tmp/filename.csv’ replace INTO TABLE [table name] FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’ (field1,field2,field3);

39>Dump all databases for backup. Backup file is sql commands to recreate all db’s.

# [mysql dir]/bin/mysqldump -u root -ppassword –opt >/tmp/alldatabases.sql

40>Dump one database for backup.

# [mysql dir]/bin/mysqldump -u username -ppassword –databases databasename >/tmp/databasename.sql

41>Dump a table from a database.

# [mysql dir]/bin/mysqldump -c -u username -ppassword databasename tablename > /tmp/databasename.tablename.sql

42>Restore database (or database table) from backup.

# [mysql dir]/bin/mysql -u username -ppassword databasename < /tmp/databasename.sql

43>Create Table Example 1.

mysql> CREATE TABLE [table name] (firstname VARCHAR(20), middleinitial VARCHAR(3), lastname VARCHAR(35),suffix VARCHAR(3),officeid VARCHAR(10),userid VARCHAR(15),username VARCHAR(8),email VARCHAR(35),phone VARCHAR(25), groups VARCHAR(15),datestamp DATE,timestamp time,pgpemail VARCHAR(255));

44>Create Table Example 2.

mysql> create table [table name] (personid int(50) not null auto_increment primary key,firstname varchar(35),middlename varchar(50),lastnamevarchar(50) default ‘bato’);

45>Reset the admin password of any tables :

#mysql -uDATABASENAME -pPASSWORD
mysql> use DATABASENAME;

mysql>UPDATE `TABLENAME` SET `PASSWORD-FILED-NAME` = MD5( 'admin' ) WHERE `USER-FIELD-NAME`.`user_name` = "admin" ;

Error Log and Slow Query Log in MySQL

Error log and Slow query log in MySQL
      
      1>    Error Log:
   ·         For Enable logs need to change in my.cnf file as follow:
      root@server# vi  /etc/mysql/my.cnf
                Or
      root@server# vi  /etc/my.cnf
   ·         Define error log with log-error in both [mysqld_safe] and [mysqld] section in my.cnf file
          [mysqld_safe]
          log-error=/var/log/mysql/error.log
          [mysqld]
          log-error=/var/log/mysql/error.log
   ·         Save file and Restart mysql service
      2>    Slow Query Log:
    ·     First thing need to check whether “Slow Query Log” is enable or not. For that access MySql and try  to execute following command.
         root@server# mysql –u root –p
         password:
         mysql> show variables like ‘%slow%’;
+———————+———————————+
| Variable_name       | Value                           |
+———————+———————————+
| log_slow_queries    | OFF                             |
| slow_launch_time    | 2                               |
| slow_query_log      | OFF                             |
| slow_query_log_file | /var/run/mysqld/mysqld-slow.log |
+———————+———————————+
·   The command result shows slow query log is currently disabled in the server.  You have add the following entries in the “/etc/mysql/my.cnf” file in-order to enable “slow query log”.  Place the entries below the section “mysqld”
[mysqld]
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 2
·         Check again whether the “slow query log” is enabled.
   mysql> show variables like ‘%slow%’;
+——————+——-+
| Variable_name    | Value |
+——————+——-+
| log_slow_queries | ON    |
| slow_launch_time | 2     |
+——————+——-+

MySql Basic Commands

1>    Login MySQL Console

# [mysql dir]mysql  -u username -p

2>    Create a database on the sql server.

mysql> create database [databasename];

3>    List all databases on the sql server.

mysql> show databases;

4>    Switch to a database.

mysql> use [db name];

5>    To see all the tables in the db.

mysql> show tables;

6>    To see database’s field formats.

mysql> describe [table name];

7>    To delete a db.

mysql> drop database [database name];

8>    To delete a table.

mysql> drop table [table name];

9>    Show all data in a table.

mysql> SELECT * FROM [table name];

10>Returns the columns and column information pertaining to the designated table.

mysql> show columns from [table name];

11>Show certain selected rows with the value “whatever”.

mysql> SELECT * FROM [table name] WHERE [field name] = “whatever”;

12>Show all records containing the name “Bob” AND the phone number ’3444444′.

mysql> SELECT * FROM [table name] WHERE name = “Bob” AND phone_number = ’3444444′;

13>Show all records not containing the name “Bob” AND the phone number ’3444444′ order by the phone_number field.

mysql> SELECT * FROM [table name] WHERE name != “Bob” AND phone_number = ’3444444′ order by phone_number;

14>Show all records starting with the letters ‘bob’ AND the phone number ’3444444′.

mysql> SELECT * FROM [table name] WHERE name like “Bob%” AND phone_number = ’3444444′;

15>Show all records starting with the letters ‘bob’ AND the phone number ’3444444′ limit to records 1 through 5.

mysql> SELECT * FROM [table name] WHERE name like “Bob%” AND phone_number = ’3444444′ limit 1,5;

16>Use a regular expression to find records. Use “REGEXP BINARY” to force case-sensitivity. This finds any record beginning with a.

mysql> SELECT * FROM [table name] WHERE rec RLIKE “^a”;

17>Show unique records.

mysql> SELECT DISTINCT [column name] FROM [table name];

18>Show selected records sorted in an ascending (asc) or descending (desc).

mysql> SELECT [col1],[col2] FROM [table name] ORDER BY [col2] DESC;

19>Return number of rows.

mysql> SELECT COUNT(*) FROM [table name];

20>Sum column.

mysql> SELECT SUM(*) FROM [table name];

21>Join tables on common columns.

mysql> select lookup.illustrationid, lookup.personid,person.birthday from lookup left join person on lookup.personid=person.personid=statement to join birthday in person table with primary illustration id;

22>Creating a new user. Login as root. Switch to the MySQL db. Make the user. Update password.

# mysql -u root -p
mysql> use mysql;
mysql> INSERT INTO user (Host,User,Password) VALUES(‘%’,’username’,PASSWORD(‘password’));
mysql> flush privileges;

23>Change a user’s password from unix shell.

# [mysql dir]/bin/mysqladmin -u username -h hostname.blah.org -p password ‘new-password’

24>Change a user’s password from MySQL prompt. Login as root. Set the password. Update password.

# mysql -u root -p
mysql> SET PASSWORD FOR ‘user’@’hostname’ = PASSWORD(‘passwordhere’);
mysql> flush privileges;

Recover a MySQL root password. Stop the MySQL server process. Start again with no grant tables. Login to MySQL as root. Set new password. Exit MySQL and restart MySQL server.

# /etc/init.d/mysql stop
# mysqld_safe –skip-grant-tables &
# mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD(“newrootpassword”) where User=’root’;
mysql> flush privileges;
mysql> quit
# /etc/init.d/mysql stop
# /etc/init.d/mysql start

25>Set a root password if there is on root password.

# mysqladmin -u root password newpassword

26>Update a root password.

# mysqladmin -u root -p oldpassword newpassword

27>Allow the user “bob” to connect to the server from localhost using the password “passwd”. Login as root. Switch to the MySQL db. Give privs. Update privs.

# mysql -u root -p
mysql> use mysql;
mysql> grant usage on *.* to bob@localhost identified by ‘passwd’;
mysql> flush privileges;

28>Give user privilages for a db. Login as root. Switch to the MySQL db. Grant privileges. Update privileges.

# mysql -u root -p
mysql> use mysql;
mysql> INSERT INTO user (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES (‘%’,’databasename’,’username’,’Y’,’Y’,’Y’,’Y’,’Y’,’N’);
mysql> flush privileges;
or
mysql> grant all privileges on databasename.* to username@localhost;
mysql> flush privileges;

29>To update info already in a table.

mysql> UPDATE [table name] SET Select_priv = ‘Y’,Insert_priv = ‘Y’,Update_priv = ‘Y’ where [field name] = ‘user’;

30>Delete a row(s) from a table.

mysql> DELETE from [table name] where [field name] = ‘whatever’;

31>Update database permissions/privilages.

mysql> flush privileges;

32>Delete a column.

mysql> alter table [table name] drop column [column name];

33>Add a new column to db.

mysql> alter table [table name] add column [new column name] varchar (20);

34>Change column name.

mysql> alter table [table name] change [old column name] [new column name] varchar (50);

35>Make a unique column so you get no dupes.

mysql> alter table [table name] add unique ([column name]);

36>Make a column bigger.

mysql> alter table [table name] modify [column name] VARCHAR(3);

37>Delete unique from table.

mysql> alter table [table name] drop index [colmn name];

38>Load a CSV file into a table.

mysql> LOAD DATA INFILE ‘/tmp/filename.csv’ replace INTO TABLE [table name] FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’ (field1,field2,field3);

39>Dump all databases for backup. Backup file is sql commands to recreate all db’s.

# [mysql dir]/bin/mysqldump -u root -ppassword –opt >/tmp/alldatabases.sql

40>Dump one database for backup.

# [mysql dir]/bin/mysqldump -u username -ppassword –databases databasename >/tmp/databasename.sql

41>Dump a table from a database.

# [mysql dir]/bin/mysqldump -c -u username -ppassword databasename tablename > /tmp/databasename.tablename.sql

42>Restore database (or database table) from backup.

# [mysql dir]/bin/mysql -u username -ppassword databasename < /tmp/databasename.sql

43>Create Table Example 1.

mysql> CREATE TABLE [table name] (firstname VARCHAR(20), middleinitial VARCHAR(3), lastname VARCHAR(35),suffix VARCHAR(3),officeid VARCHAR(10),userid VARCHAR(15),username VARCHAR(8),email VARCHAR(35),phone VARCHAR(25), groups VARCHAR(15),datestamp DATE,timestamp time,pgpemail VARCHAR(255));

44>Create Table Example 2.

mysql> create table [table name] (personid int(50) not null auto_increment primary key,firstname varchar(35),middlename varchar(50),lastnamevarchar(50) default ‘bato’);

45>Reset the admin password of any tables :

#mysql -uDATABASENAME -pPASSWORD
mysql> use DATABASENAME;

mysql>UPDATE `TABLENAME` SET `PASSWORD-FILED-NAME` = MD5( 'admin' ) WHERE `USER-FIELD-NAME`.`user_name` = "admin" ;

Error Log and Slow Query Log in MySQL

Error log and Slow query log in MySQL
      
      1>    Error Log:
   ·         For Enable logs need to change in my.cnf file as follow:
      root@server# vi  /etc/mysql/my.cnf
                Or
      root@server# vi  /etc/my.cnf
   ·         Define error log with log-error in both [mysqld_safe] and [mysqld] section in my.cnf file
          [mysqld_safe]
          log-error=/var/log/mysql/error.log
          [mysqld]
          log-error=/var/log/mysql/error.log
   ·         Save file and Restart mysql service
      2>    Slow Query Log:
    ·     First thing need to check whether “Slow Query Log” is enable or not. For that access MySql and try  to execute following command.
         root@server# mysql –u root –p
         password:
         mysql> show variables like ‘%slow%’;
+———————+———————————+
| Variable_name       | Value                           |
+———————+———————————+
| log_slow_queries    | OFF                             |
| slow_launch_time    | 2                               |
| slow_query_log      | OFF                             |
| slow_query_log_file | /var/run/mysqld/mysqld-slow.log |
+———————+———————————+
·   The command result shows slow query log is currently disabled in the server.  You have add the following entries in the “/etc/mysql/my.cnf” file in-order to enable “slow query log”.  Place the entries below the section “mysqld”
[mysqld]
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 2
·         Check again whether the “slow query log” is enabled.
   mysql> show variables like ‘%slow%’;
+——————+——-+
| Variable_name    | Value |
+——————+——-+
| log_slow_queries | ON    |
| slow_launch_time | 2     |
+——————+——-+

Backup and Restore in MySQL

Backup and Restore MySQL Database
·        Mysql include mysqldump is an effective tool to backup MySQL database. It creates a *.sql file with DROP table, CREATE table and INSERT intosql-statements of the source database. To restore the database, execute the *.sql file on destination database.
Backup and Restore command line syntax
·        backup: # mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
·        restore:# mysql -u root -p[root_password] [database_name] < dumpfilename.sql
   1>    Backup a single database:
          # mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
   2>    Backup multiple database:
               # mysqldump -u root -p[root_password] [database_name] [database_name_2] > dumpfilename.sql
   3>    Verify the dumpfilename.sql dump file contains both the database backup
         # grep -i “Current database:” /tmp/dumpfilename.sql
           Current Database: `database_name`
           Current Database: `database_name_2`
   4>    Backup all the databases:
         # mysqldump -u root -ptmppassword –all-databases > /tmp/all-database.sql
   5>    Backup a specific table:
         # mysqldump -u root -ptmppassword database1 accounts_contacts /tmp/database1_accounts_contacts.sql
    6>    Different mysqldump group options:
–opt is a group option, which is same as –add-drop-table, –add-locks, –create-options, –quick, –extended-insert, –lock-tables, –set-charset, and –disable-keys. opt is enabled by default, disable with –skip-opt.
–compact is a group option, which gives less verbose output (useful for debugging). Disables structure comments and header/footer constructs. Enables options –skip-add-drop-table –no-set-names –skip-disable-keys –skip-add-locks
How to Restore MySQL database
    1>    Restore a database: When you are restoring the dumpfilename.sql on a remote database, make         sure to create the database before you can perform the restore.
# mysql -u root –ptmppassword
# mysql> create database database_name;
# mysql -u root -ptmppassword database_name < /tmp/dumpfilename.sql
    2>    Backup a local database and restore to remote server using single command: if you want to         create read only database in remote computer. For that you need to create database in remote               computer and then run below command.
[local-server]# mysqldump -u root -ptmppassword database_name  | mysql  \   -u root -ptmppassword –host=remote-server -C database_name1