Table of Contents

Mysql Upgrade Issue

Easy Command List

How to check Type of Table

You can use any of the following command to determine table type.

SHOW TABLE STATUS WHERE Name = 'table_name';
OR
SHOW CREATE TABLE 'table_name';
OR
SHOW TABLE STATUS;

Mysql Generate hash for password

SELECT PASSWORD('mypass');

OR

SELECT OLD_PASSWORD('mypass');

MySQL Cluster information gathering

How to find which master log slave reading

cat slaves | while READ i ; do echo $i; mysql -h$i -e "SHOW SLAVE STATUS \G" | grep "Relay_Master_Log_File"; done

How continue with the next statement in the replication

NOTE : Make sure you run the query manually on slave if it is query issue.

STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

Issue / Solutions

 appeared after upgrade

This issue is appeared due to the default character set.
As Both version of database diff. character set. To get rid of that character try to following steps.

  1. insert following line to your my.cnf
     set-variable=character-set-server=UTF8
  2. re-import database should fix the issue.
mysqldump does not save stored procedure / functions / triggers.

By default mysqldump only store triggers not procedures/functions.

In order to include to your mysqldump there is switch
-R, –routines Dump stored routines (functions and procedures).

In order to include triggers to your mysqldump there is switch
–triggers Dump triggers for each dumped table

mysqldump -R -u <username> -p<password> <database>
After upgrade from 4.0 to 4.1 see issue on charset

Use following line in your my.cnf will resolve the issue. as latin1 is default character set in 4.0 and 4.1 has utf8

| my.cnf
 set-variable=character-set-server=latin1

General Log

It log each and every query.
You can enable it in TABLE or FILE.

Following method shows how to enable it in table without restarting,
Also same you can apply in my.cnf

Structure usually created with mysql installation if you don't see could be old structure.
try running mysql_upgrade

| Table Structure
CREATE TABLE `general_log` (
`event_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext,
`thread_id` INT(11) DEFAULT NULL,
`server_id` INT(11) DEFAULT NULL,
`command_type` VARCHAR(64) DEFAULT NULL,
`argument` mediumtext) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'

You can choose log_output to be file OR table OR both.

| Variable
general_log=1
log_output=TABLE,FILE

Following command can help you apply changes without restart.

| Command
SET GLOBAL log_output='TABLE';
SET GLOBAL general_log='ON';

How to flush log.

| Flush log
mysql -u root -pp4ssw0rd -e "TRUNCATE TABLE mysql.general_log"

mysql dump only partition information

If you were planning to drop a partition, you may need to back it up. find out the range of the partition by

show create table tablename

replace the range fields as follows:

mysqldump -S --no-create-info --where="RANGE(day) >= lowrange AND RANGE(day) < highrange" database_name table_name > /jtmp/table.sql

Reading Binlog

Simple command to read binlog is

mysqlbinlog mysql-bin.000013

You can use following regularly used options.

--start-datetime=
--start-position=
--server-id=

Can't open file

I've started seeing following error in my log.

[ERROR] /usr/libexec/mysqld: Can't open file: 

It is caused by file discriptor limit set by the system.
You can check that by changing your shell to mysql user and running following command.

ulimit -a

In order to increase the open file limit.
edit following file.

/etc/security/limits.conf
mysql  soft  nofile  49152
mysql  hard  nofile  65536

Now you can check mysql for limit seen by mysql.
login to mysql as root and run following command.

show GLOBAL VARIABLES LIKE "open%";

Now you can modify it to increased limit in limits.conf.
by editing following file.

/etc/my.cnf
[mysqld]
open-files-limit=49152
 
[mysqld_safe]
open-files-limit=49152

restart mysql and check again it should represent new value.

InnoDB: Unable to lock ./ibdata1, error: 11

I've stumble across this issue while running mariadb server in VM Guest.
I believe this happens sometime when VDP is doing backup or machine is being migrated by DRS.

In my case, i've enable innodb per tables. So i've to clear lock from all files in subfolder.
In order to fix the issue, following command usually fix the issue.

systemctl stop mariadb
cd /var/lib/mysql
for i in `find . -name '*.ibd'`; do mv $i $i.bk; cp -a $i.bk $i ; rm $i.bk ; done
systemctl start mariadb