Hi, My name is Jimmy Sam. If you need DBA help, please email to jimmy_sam001@yahoo.com for further discussion. Thanks.

MySQL Quick Links

login  create user  permission  mysqldump  purge binlog  installation  setup replication  skip replication error  kill query  transaction and lock 
explain plan and hints  index  function and variables  storage engine  show 

External Links

mysqlperformanceblog  sqlyog  planet mysql  Oracle MySQL 


top  next 

how to login

mysql --database fdw_web;

mysql -u username -ppassword databasename < /tmp/databasename.sql

mysql -umy_username -pmy_password_10 -S ${SOCKET_FILE}
mysql -uroot -p -S
mysql -uroot -pmy_password_10 -S ${SOCKET_FILE}

mysql -u -p -P -h
mysql -h myhostname -P 3309 -umyuser -pmypass

alias myroot='mysql -uroot -pmy_password -S ${SOCKET_FILE}'
myroot -A -ss --database my_db -e "show tables"|awk '{printf ("drop table %s;\n", $1);}'

mysql -ss -A -e "flush privileges;"  # avoid use my_database hanging issue
mysql -vvv -->  print the sql commands befroe print the results

top  prev  next 

login mysql using default password

#in client side $HOME/.my.cnf file
[client]
user=myusername
password=mypassword
top  prev  next 

login mysql without password

# in server side my.cnf file before db start
[mysqld]
skip-grant-tables
top  prev  next 

Variables And Functions

select database();
select @@version;

CNF_FILE:
#set-variable=key_buffer=16M

select database(),user(),@@hostname,@@port,@@server_id;
select version();
select @@sql_mode;
# select @@pseudo_thread_id;
# show variables like '%id%';
# show databases;

SET @schema = IFNULL(@schema,DATABASE());
SET @table='album';

select concat_ws(',',code,ref_code_id,ifnull(expiration_date,''),ifnull(description,'');

select concat(code,',',ref_code_id,',',expiration_date,',',description,',',max_uses,',',times_used);

SELECT CONCAT_WS(',', field1, field2, field3) FROM table;


show errors;
show plugins;

SHOW ENGINE INNODB STATUS;

SET FOREIGN_KEY_CHECKS=0;
set-variable=record_buffer=16M


set global max_allowed_packet=1000000000;

set global net_buffer_length=1000000;


SELECT @@MAX_ALLOWED_PACKET;

set global max_allowed_packet=1000*1024*1024;

set max_allowed_packet=1000*1024*1024;

set net_buffer_length=1000000;
max_allowed_packet=16M
max_allowed_packet=4096M

show global variables like 'max%';

SET GLOBAL max_connect_errors=10000;

SET GLOBAL max_connections=2000;

top  prev  next 

purge logfile

show global variables like 'expi%';
set global expire_logs_days=18;
# ls -lart
PURGE BINARY LOGS TO 'IDSS1_bin_.000025';
PURGE BINARY LOGS BEFORE '2011-10-31 09:00:00';

SHOW BINLOG EVENTS \G
show binlog events in 'MYDB_bin_.000286';

top  prev  next 

Create MySQL Users

select user from mysql.user;

show grants for myuser;

create user my_username identified by 'my_password';
grant usage on *.*  to my_username@'%';
grant usage on *.*  to my_username@'%' WITH MAX_USER_CONNECTIONS 3;

grant select on my_db.*  to my_username@'%';
grant select on my_db.my_table to my_username@'%';

create user dixcm identified by 'dixcm_xx';
grant usage on *.*  to dixcm@'%';

grant select on log_sbfe.transaction_log to dixcm@'%';
grant select on log_sbfe.transaction_log_online to dixcm@'%';
grant select on delta_sbfe.corrections_dd to dixcm@'%';
grant select on delta_sbfe.corrections_g1 to dixcm@'%';
grant select on delta_sbfe.corrections_g2 to dixcm@'%';
grant select on delta_sbfe.corrections_o1 to dixcm@'%';
grant select on delta_sbfe.corrections_o2 to dixcm@'%';

flush privileges;

create user xxx identified by 'yyyy';
show grants for myuser;
GRANT SELECT ON *.* TO 'mbs_reports'@'%' IDENTIFIED BY PASSWORD '*B4424F49FE30FF0954EC06D234CAA3C39C768736' WITH MAX_USER_CONNECTIONS 30;

dbssh dbpdba 
set linesize 250 trimspool on
select sid,vip,host,port,db_owner,version,db_type from db_info where sid='EOMRPTP1';
select sid,vip,host,port,db_owner,version,db_type from db_info where sid like '%EOM%'

select user,host from user;
select concat('show grants for ', user, ';') from mysql.user where host='%';
myroot -ss  -A -e "select concat('show grants for ', user, ';') from mysql.user where host='%';"

*** sample:
myroot -ss  -A -e "select concat('show grants for ', user, ';') from mysql.user where host='%' order by user;"|myroot|sed 's/$/;/'

*** replace old user:
myroot -ss  -A -e "select concat('show grants for ', user, ';') from mysql.user where user='laufenta' and host='%' order by user;"|myroot |sed 's/laufent/levinedx/'|sed 's/$/;/'

myroot -ss  -A -e "flush privileges;"

test: mysql -umy_username -pmy_password_10 -S ${SOCKET_FILE}

show databases;

top  prev  next 

MySQL Permission and Grants

mysqld_safe init_file
/etc/init.d/mysql start/stop $bindir/mysqld_safe --skip-grant-tables --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 &

SET PASSWORD FOR 'root'@'%' = PASSWORD('myrootpassword');
flush privileges;

UPDATE mysql.user SET Password=PASSWORD('myrootpassword')
  WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

generate a random password: openssl rand -base64 8

grant all privileges on databasename.* to username@localhost;

select user,password,host from user order by user,host,password;
show grants for root@localhost;

***** select concat('show grants for ', user,'@', "'", host,"'", ';') from user;

select 'show grants for ''' || user || ''';' xx from mysql.user order by user;
select concat(concat('show grants for ''',  user ), ''';' ) xx from mysql.user order by user;

-- grab user
mysql_mbsi_var -ss  -e"select user from mysql.user"|grep -i mbsi
mysql_mbsi_var -ss  -e"select concat(concat('show grants for ', user),';') from mysql.user"|grep -i mbsi

# == Best All
mysql_mbsi_var -ss  -e"select concat(concat('show grants for ', user),';') from mysql.user"|grep -i mbsi|mysql_mbsi_var -ss|sed -e 's/$/;/g'

# == Best Selective
mysql_mbsi_var -ss  -e"select concat(concat('show grants for ', user),';') from mysql.user"|grep -i mbsi|mysql_mbsi_var -ss|sed -e 's/$/;/g'|grep -i fip_region


top  prev  next 

mysqldump

mysqldump -u root mysql user>mysql_users.sql
mysqldump -u root --databases rt3>rt3.sql
mysqldump --all-databases>all_databases.sql

**** mysqldump --databases --skip-add-drop-table -u root db1

-- use mydb;
\. xxx.sql

mysql -u root -p --socket=/tmp/mysql_restore.sock \
   < ${BACKUP_LOC}/20090620.sql

mysql database < db-dump-file.sql

mysqldump --opt database > db-dump-file.sql
mysqldump --opt database table-name > db-dump-file.sql
mysqldump --opt --databases database1 database2 database3 > db-dump-file.sql
mysqldump --opt --all-databases > total-db-dump-file.sql
mysqldump -u user-id -h host-name --opt --all-databases > total-db-dump-file.sql
mysqlcheck -r -u root -p Database-Name

mysqldump --opt database | mysql --host=host-name -C database

*** locking or blocking issue: 
mysqldump  -S${SOCKET_FILE} -uroot -p${p} --no-data  --single-transaction --databases  -R ${db}
mysqldump  -S${SOCKET_FILE} -uroot -p${p} --opt   --no-create-info --single-transaction --databases ${db}  | gzip > ${loc}/${db}_${INSTANCE_NAME}_data.sql.gz

mysqldump --databases jiradb >aa.sql

***** mysqldump --max_allowed_packet=512M --force --flush-privileges --log-error=mysqldump_errors.log -u dbadmin -S /var/lib/mysql/mysql.sock --master-data=2 --all-databases --single-transaction|gzip>mbsp1_from_01.sql.gz

LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES  TERMINATED BY '\n' (field1,field2,field3);
load data infile 'Web_Appl_Button.txt' into table web_appl_button fields terminated by '|'   OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
load data local infile '/home/dbadmin/fastwebdata/web_button.txt'      into table web_button fields terminated by '|' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';

*** trim date_format:        update web_application_x set last_update_dt=substr(last_update_dt,1,19);
*** set back to null field:  update web_application_x set num_questions=null where num_questions='';


mysql -h localhost -u root -p -e "select host,db,user from db" mysql
mysqladmin -h localhost -u root -p processlist
mysql -h localhost -u root -p database-name < text-file-with-sql-statements.sql
mysql -u -p -P -h
mysql -uroot -p -S

mysql -uxxxx -pyyyyy -P3309 -hzzzzzz
mysql -h myhostname -P 3309 -umyuser -pmypass

mysql -ss -A 

**** mysql -vvv -->  print the sql commands befroe print the results


mysql  -S${SOCKET_FILE} -uroot -p${p} --skip-column-names -e "select user, host from user" mysql

SET SESSION SQL_LOG_BIN=0;
SET SESSION SQL_LOG_BIN=1;

SHOW TABLE STATUS FROM radioshack like 'p_form_app_answers';

top  prev  next 

mysql installation

$HOME/.my.cnf
[client]
user=myusername
password=mypass

my.cnf
[mysqld_safe]
ledir=/db/p/scralf/v1/mysql5170/libexec  # grab $MYSQL_HOME/libexec contents
[mysqld]
basedir=/db/p/scralf/v1/mysql5170  # grab $MYSQL_HOME errormsg contents
# base_dir=/usr
datadir=/db/p/scralf/v3/table/ALFP3
tmpdir=/db/p/scralf/v1/admin/ALFP3/tmp
skip-slave-start

export MYSQL_HOME=/db/p/scralf/v1/mysql5170
export PATH=$PATH:$MYSQL_HOME/bin
export MANPATH=$MYSQL_HOME/man:$MANPATH
export LD_LIBRARY_PATH=$MYSQL_HOME/mysql/plugin  # grab $MYSQL_HOME/mysql/plugin contents

-- --------------------
unset MYSQL_HOME
my.cnf --> base_dir=/usr

mysql_install_db --ldata=${DATADIR}
mysql_install_db --ldata=${DATADIR} --user=${USER}

mysql_install_db --defaults-file=/opt/mysql/backup/data/my.cnf
--
mysqld --bootstrap
mysqld_install_cmd_line="$mysqld_bootstrap $defaults $mysqld_opt --bootstrap \
--basedir=$basedir --datadir=$ldata --skip-innodb \
--skip-bdb --skip-ndbcluster $args --max_allowed_packet=8M \
--net_buffer_length=16K"

mysqld --skip-grant &


nohup mysqld_safe --language=/db/p/wiki/v1/product/mysql-5.0.51a-linux-i686-icc-glibc23/share/mysql/english --defaults-file=${CNF_FILE} 2>&1 &
--

/usr/bin/mysql_secure_installation
1): change root password
UPDATE mysql.user SET Password=PASSWORD('$password1') WHERE User='root';
flush privileges;

2): remove anonymous users
DELETE FROM mysql.user WHERE User='';

3): remove remote root user
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';

4): drop test database
DROP DATABASE test;
top  prev  next 

MySQL Software Installation

yum list 2>/dev/null |grep -i percona|grep -i 51|egrep "client|devel|server|shared"|awk 'BEGIN {print "yum install \\";} {printf "%s-%s \\\n", $1, $2;} END {print " ";}'
yum list 2>/dev/null |grep -i percona|grep -i 51|egrep "client|devel|server|shared"|awk 'BEGIN {print "yum install \\";} {printf "%s-%s \\\n", $1, $2;} END {print " ";}'|sed -e 's/.x86_64//g'
yum list 2>/dev/null| grep -i mysql |grep -i installed|awk 'BEGIN {print "yum install \\";} {printf "%s-%s \\\n", $1, $2;} END {print " ";}'

yum install MySQL-client-5.5.21-1.rhel5.x86_64 MySQL-server-5.5.21-1.rhel5.x86_64 MySQL-shared-5.5.21-1.rhel5.x86_64

yum update xtrabackup.x86_64

yum update Percona-Server-client-51.x86_64 \
            Percona-Server-devel-51.x86_64 \
            Percona-Server-server-51.x86_64 \
            Percona-Server-shared-51.x86_64

mysql_upgrade -uroot -p`cat ${CFG_LOC}/.pswd` -S ${SOCKET_FILE} -v -d ${DATADIR}


rpm -qa|grep -i mysql

rpm -ihv *.rpm
rpm -uhv *.rpm

rpm -ihv http://www.percona.com/downloads/percona-Server-5.1/Percona-Server-5.1-61-13.2/RPM/rhel5/x86_64/Percona-Server-client-51-5.1.61-rel13.3.435.rhel5.x86_64.rpm
rpm -ihv http://www.percona.com/downloads/percona-Server-5.1/Percona-Server-5.1-61-13.2/RPM/rhel5/x86_64/Percona-Server-devel-51-5.1.61-rel13.3.435.rhel5.x86_64.rpm
rpm -ihv http://www.percona.com/downloads/percona-Server-5.1/Percona-Server-5.1-61-13.2/RPM/rhel5/x86_64/Percona-Server-server-51-5.1.61-rel13.3.435.rhel5.x86_64.rpm
rpm -ihv http://www.percona.com/downloads/percona-Server-5.1/Percona-Server-5.1-61-13.2/RPM/rhel5/x86_64/Percona-Server-shared-51-5.1.61-rel13.3.435.rhel5.x86_64.rpm
rpm -ihv http://www.percona.com/downloads/percona-Server-5.1/Percona-Server-5.1-61-13.2/RPM/rhel5/x86_64/Percona-Server-test-51-5.1.61-rel13.3.435.rhel5.x86_64.rpm

top  prev  next 

MySQL Replication Setup

grant replication slave, replication client on *.* to rep_user@'%' identified by 'somepassword';

grant replication slave, replication client on *.* to repl@'%' identified by 'superSecretpwd';

mysqldump --user=root --password --extended-insert --all-databases --master-data  >full_backup.sql 
CHANGE MASTER TO MASTER_LOG_FILE='MYITLOP1_bin_.000010', MASTER_LOG_POS=174; 
replicate-do-db=mydb1,mydb2
server-id=1
auto_increment_increment=10
auto_increment_offset=1 
server-id=2
auto_increment_increment=10
auto_increment_offset=2 
log-bin-index=/db/p/itlo/v2/archlog/MYITLOP1/MYITLOP1_bin.index
relay-log=/db/p/itlo/v1/admin/MYITLOP1/logs/relay.log
relay-log-info-file=/db/p/itlo/v1/admin/MYITLOP1/logs/relay-log.info
relay-log-index=/db/p/itlo/v1/admin/MYITLOP1/logs/relay-log.index 

innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend

lower_case_table_names=1

slave-net-timeout = 30
master-connect-retry = 30 

--slave-skip-errors=1032,1062,1053
--slave-skip-errors=all

master-host=dbpitlo-vip4
master-user=rep_user
master-password=somepassword 

Modify the datadir value
datadir=/opt/mysql/backup/data

set-variable    =       ft_max_word_len=254
set-variable    =       key_buffer_size=384M
set-variable    =       max_allowed_packet=5M
set-variable    =       max_connections=1000
set-variable    =       myisam_sort_buffer_size=128M
set-variable    =       open_files_limit=5010
set-variable    =       query_cache_size=64M
set-variable    =       query_cache_type=1
set-variable    =       read_buffer_size=32M
set-variable    =       sort_buffer_size=50M
set-variable    =       table_cache=1024
set-variable    =       thread_cache_size=8
set-variable    =       thread_concurrency=10

set-variable=record_buffer=16M
set global max_allowed_packet=1000000000;
set global net_buffer_length=1000000;
SELECT @@MAX_ALLOWED_PACKET;
max_allowed_packet=16M

Add --defaults_file to the mysql-safe and mysqlmanager startup commands in the start option
--defaults-file=$datadir/my.cnf

SET @@binlog_format="STATEMENT"
SET @@binlog_format="MIXED"
SET @@binlog_format="ROW"
select @@binlog_format;


top  prev  next 

MySQL Replication Error Fixes

replication error and latency:
show global variables like '%skip%';

set global sql_slave_skip_counter=1;
# set global sql_slave_skip_counter=0;
start slave;
show slave status\G

stop slave;

select * from latency;
show global variables like '%bin%';
set sql_log_bin=0;

update latency 
set time_stamp='2013-01-23 10:56:19'
where server_name='other_host_name';

commit;


top  prev  next 

Explain Plan and Hints

EXPLAIN SELECT select_options;
EXPLAIN extended SELECT select_options;
EXPLAIN partitions SELECT select_options;
EXPLAIN tbl_name

EXPLAIN SELECT artist_id, type, founded  FROM artist WHERE name = 'Coldplay'\G
EXPLAIN EXTENDED SELECT artist_id, type, founded  FROM artist  WHERE name = 'Coldplay'\G

SELECT SQL_NO_CACHE * FROM tbl1;

SELECT user_id FROM users USE INDEX(user_type) 
WHERE user_type=2
     AND user_id > 2938575 AND parent_id=0 AND status=1 
ORDER BY user_id LIMIT 1;


SET [GLOBAL|SESSION] optimizer_switch="index_merge_intersection=off";
SET @@session.optimizer_switch='index_merge_intersection=off';
SET @@session.optimizer_switch='index_merge_intersection=on';


top  prev  next 

Information Schema And Dictionary Views

INFORMATION_SCHEMA.TABLES

show create table my_tablename\G

top  prev  next 

Storage Engine

ALTER TABLE artist ENGINE=MyISAM;
ALTER TABLE MyTable ENGINE = InnoDB;
top  prev  next 

Index

SHOW CREATE TABLE artist\G
SHOW INDEXES FROM my_tablename\G
SHOW INDEXES;

EXPLAIN SELECT artist_id, name, country_id FROM artist USE INDEX (type) WHERE founded = 1980 AND type='Band'\G
EXPLAIN SELECT artist_id, name, country_id FROM artist FORCE INDEX (type) WHERE founded = 1980 AND type='Band'\G

# not in Official MySQL Statements
SHOW INDEX_STATISTICS

EXPLAIN SELECT artist_id, name, country_id FROM artist USE INDEX (type) WHERE founded = 1980 AND type='Band'\G

EXPLAIN SELECT artist_id, name, country_id FROM artist FORCE INDEX (type) WHERE founded = 1980 AND type='Band'\G


ALTER TABLE my_table ADD PRIMARY KEY [index-name] (column1,column2...);

ALTER TABLE my_table ADD [UNIQUE] KEY|INDEX [index-name] (column1,column2...);

ALTER TABLE artist DROP INDEX founded,ADD INDEX founded_name (founded,name);

EXPLAIN SELECT artist_id, name, country_id FROM artist USE INDEX (type) WHERE founded = 1980 AND type='Band'\G
EXPLAIN SELECT artist_id, name, country_id FROM artist FORCE INDEX (type) WHERE founded = 1980 AND type='Band'\G

ALTER TABLE artist ADD INDEX (founded);
ALTER TABLE album ADD INDEX m1 (country_id, album_type_id);
ALTER TABLE album ADD INDEX m2 (album_type_id,country_id);
ALTER TABLE artist DROP INDEX name, ADD UNIQUE INDEX(name);

EXPLAIN SELECT artist_id, name, country_id FROM artist USE INDEX (type) WHERE founded = 1980 AND type='Band'\G
EXPLAIN SELECT artist_id, name, country_id FROM artist FORCE INDEX (type) WHERE founded = 1980 AND type='Band'\G

EXPLAIN SELECT artist_id, name, country_id FROM artist IGNORE INDEX (founded);
EXPLAIN SELECT artist_id, name, country_id FROM artist IGNORE INDEX (founded,founded_2) USE INDEX (type_2);

EXPLAIN SELECT artist_id, name, country_id FROM artist USE INDEX (type) WHERE founded = 1980 AND type='Band'\G
EXPLAIN SELECT artist_id, name, country_id FROM artist FORCE INDEX (type) WHERE founded = 1980 AND type='Band'\G
top  prev  next 

Kill Query Or Thread

mysql -e "show processlist"|grep -i select|grep -i lock
mysql -e "show processlist"|grep -i select|grep -i lock|awk '{print "kill " $1 ";"}'

mysql -e "show full processlist"|grep -i select|grep -i lock
mysql -e "show full processlist"|grep -i select|grep -i lock|awk '{print "kill " $1 ";"}'

set @@autocommit=0;
select connection_id();

show processlist;
show full processlist;
show status\G 
show innodb status\G to verify
show engine innodb status\G  # version 5.6 
show engine innodb status\G

SELECT * FROM information_schema.INNODB_TRX\G  

KILL [CONNECTION | QUERY] thread_id
KILL QUERY will keep the connection
KILL or KILL CONNECTION will disconnect the session and kill the user process
show innodb status\G to verify
top  prev  next 

transaction_lock

flush tables with read lock; 
FLUSH TABLES WITH READ LOCK;

UNLOCK TABLES;

show global variables;

show global variables like '%tx%';
show global variables like 'tx_isolation';

select @@tx_isolation;

set global tx_isolation='REPEATABLE-READ';
set global tx_isolation='READ-UNCOMMITTED';
set global tx_isolation='READ-COMMITTED';
set global tx_isolation='SERIALIZABLE';

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;  # default
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
top  prev  next 

show commands


show databases;
show tables;

show processlist;
show full processlist;

FLUSH STATUS;
SHOW SESSION STATUS LIKE 'Handler_read_next';
SHOW SESSION STATUS LIKE 'Handler_read%';
SHOW SESSION STATUS LIKE '%sort%';
show status like "Qcache_hits";

show slave status \G
show master status \G

SHOW VARIABLES LIKE 'profiling';

show profiles;
show profile for query 6;
show profile CPU for query 6;

show global variables like 'max_connections';

show global status like 'max%';


top  prev  next 

Basic MySQL Commands

mysql> \?
create database [database name];
use db_name;
show databases;
show databases like 'ba%'

show tables;
describe table_name;

show tables from db_name;
show tables from db_name like '__ab%';

show table status;
show table status from db_name;

show index from table_name;
show index from table_name from db_name;

show columns from table_name;
show columns from table_name from db_name;

select user(), now(), version(), database();
select database(),user(),@@hostname,@@port,@@server_id;

desc mysql.user;
select * from mysql.user;

show grants; 
show grants for user_name;

show processlist;
show full processlist;

show status;
show global status;

flush status;
flush logs;
flush tables with read lock;

show variables;

drop database [database name];
drop table [table name];

SELECT * FROM [table name];

show columns from [table name];

SELECT * FROM [table name] WHERE [field name] = "whatever";
SELECT DISTINCT [column name] FROM [table name];
SELECT [col1],[col2] FROM [table name] ORDER BY [col2] DESC;
SELECT COUNT(*) FROM [table name];
SELECT * FROM [table name] WHERE rec RLIKE "^xyz";
SELECT SUM(*) FROM [table name];
SELECT table_schema "Data Base Name", sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB" FROM information_schema.TABLES GROUP BY table_schema ;

alter table [table name] drop column [column name];
alter table [table name] add column [new column name] varchar (20);
alter table [table name] change [old column name] [new column name] varchar (50);
alter table [table name] add unique ([column name]);
alter table [table name] modify [column name] VARCHAR(3);
alter table [table name] drop index [colmn name];

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

top  prev  next 

Read Mysqlbinlog

mysqlbinlog --base64-output=DECODE-ROWS --verbose {log file} > {output file} 
mysqlbinlog --verbose  --hexdump  --base64-output=DECODE-ROWS --result-file=mantisp2_relay_log_000662_keep.txt --start-position=794955262 relay.000662.keep
mysqlbinlog --verbose  --hexdump --base64-output=DECODE-ROWS --result-file=mantisp2_relay_log_000662_keep.txt relay.000662.keep
mysqlbinlog --verbose  --hexdump --base64-output=DECODE-ROWS --result-file=mantisp2_relay_log_000663_keep.txt relay.000663.keep

mysqlbinlog --start-date="2009-06-20 9:50:00" \
     --stop-date="2009-06-20 10:05:00" \
     ${ARCH_LOC}/bin.123456 \
> /tmp/mysql_restore.sql

mysqlbinlog --stop-date="2009-06-20 9:50:59" \
      ${ARCH_LOC}/bin.123456

mysqlbinlog --start-date="2009-06-20 9:55:00" \
        ${ARCH_LOC}/bin.123456

top  prev  next 

Network Binding

mysqld --socket=/tmp/mysql_restore.sock --skip-networking

my.cnf
#Add the following
skip-networking
#Comment out the following
#bind-address = ip-address

top 

Working With Shell

myroot -A -ss --database alfresco402 -e "show tables"|awk '{printf ("drop table %s;\n", $1);}'

top  prev  next 

Percona Tool Kit

pt-show-grants | grep dveeden
-- Grants for 'dveeden'@'localhost'
GRANT USAGE ON *.* TO 'dveeden'@'localhost';

working: running on slowest server to avoid error
./pt-table-checksum-mbsi --replicate-database ecrash --replicate ecrash.percona_checksums --create-replicate-table --empty-replicate-table --recursion-method hosts --max-lag 3000000 --nocheck-replication-filters --lock-wait-time=50 -h bctlppnc066 -P 3306 -d ecrash -t agency -u dbamaint -pkungfudba1!



working:
./pt-table-checksum-mbsi --replicate-database ecrash --replicate ecrash.percona_checksums --nocheck-replication-filters --lock-wait-time=50 -h alalpdba015 -P 3306 -d ecrash -t vehicle -u dbamaint -pkungfudba1!


./pt-table-checksum-mbsi --replicate-database ecrash --replicate ecrash.percona_checksums --max-lag 3000000 --nocheck-replication-filters --lock-wait-time=50 -h alalpdba015 -P 3306 -d ecrash -t vehicle -u dbamaint -pkungfudba1!

./pt-table-checksum-mbsi --replicate-database ecrash --replicate ecrash.percona_checksums --recursion-method hosts --max-lag 3000000 --nocheck-replication-filters --lock-wait-time=50 -h alalpdba015 -P 3306 -d ecrash -t agency -u dbamaint -pkungfudba1!

./pt-table-checksum-mbsi --replicate-database ecrash --replicate ecrash.percona_checksums --create-replicate-table --empty-replicate-table --recursion-method dsn="-h alalpdba015 -P 3306 -t ecrash.agency" --max-lag 3000000 --nocheck-replication-filters --lock-wait-time=50 -h alalpdba015 -P 3306 -d ecrash -t
agency -u dbamaint -pkungfudba1!

./pt-table-checksum-mbsi --replicate-database ecrash --replicate ecrash.percona_checksums --create-replicate-table --empty-replicate-table --recursion-method hosts --max-lag 3000000 --nocheck-replication-filters --lock-wait-time=50 -h alalpdba015 -P 3306 -d ecrash -t agency -u dbamaint -pkungfudba1!

pt-table-sync --print --lock=0 -pkungfudba1! -udbamaint --no-check-slave --no-check-triggers h=bctlpdba006.risk.regn.net,D=framework,t=value_grp2 h=alalpdba038.risk.regn.net>value_grp3_diff.sql

pt-table-sync --print --lock=0 -pkungfudba1! -udbamaint --no-check-slave --no-check-triggers h=bctlpdba006.risk.regn.net,D=framework,t=value_grp3 h=alalpdba038.risk.regn.net>value_grp3_diff.sql

mysql -h alalpdba038.risk.regn.net -P 3306 -pkungfudba1! -udbamaint
use framework;
set sql_log_bin=0;
\. value_grp3_diff.sql
set sql_log_bin=1;
top  prev  next 

Implicit Data Type Conversion

Implicit Data Type Conversion During MySQL Replication ( master/slave data inconsistent )
set global slave_type_conversions=ALL_NON_LOSSY;
show global variables like  'slave_type_conversions';
set global slave_type_conversions='ALL_LOSSY,ALL_NON_LOSSY';
top  prev  next 

disable foreign keys

set foreign_key_checks = 0; only kinda works
top  prev  next 

schema space


https://github.com/effectiveMySQL/BackupAndRecovery/blob/master/links.txt

https://raw.github.com/effectiveMySQL/BackupAndRecovery/master/links.txt

https://github.com/effectiveMySQL

# Effective MySQL: Replication Techniques In Depth by Ronald Bradford and Chris Schneider
http://effectivemysql.com/book/replication-techniques/

Replication Related:

-- BIN LOG on/off
SET SQL_LOG_BIN=0;
SET SQL_LOG_BIN=1;

-- SKIP ERROR
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE SQL_THREAD;
SHOW SLAVE STATUS\G
SHOW MASTER STATUS\G

SET SESSION binlog_format=ROW;  cf: STATEMENT, MIXED


-- Find Log Bin Directory
grep log-bin ${MY_CNF} | cut -d'=' -f2

-- Read Bin Log or relay log Content
mysqlbinlog mysql-bin.000001
mysqlbinlog mysqld-relay-bin.000005

-- Purge Bin Logs
PURGE BINARY LOGS TO 'mysql-bin.000005';
PURGE BINARY LOGS BEFORE '2011-10-31 09:00:00';

SHOW MASTER LOGS;
SHOW WARNINGS\G
PURGE MASTER LOGS TO 'mysql-bin.000012';

SHOW GLOBAL STATUS LIKE 'Com_alter%';

# Identifying Schema Inconsistencies
SHOW GLOBAL STATUS LIKE 'Com_alter%';

# Identifing Schema Inconsistencies
MASTER="alpha"
MASTER="beta"
mysqldump -uroot -ppasswd -h${MASTER} --no-data --skip-dump-date --databases test | md5sum
mysqldump -uroot -ppasswd -h${SLAVE} --no-data --skip-dump-date --databases test | md5sum
mysqldump -uroot -ppasswd -h${MASTER} --no-data --skip-dump-date --databases test | sed -e "s/AUTO_INCREMENT=[0-9]* //" | md5sum
mysqldump -uroot -ppasswd -h${SLAVE} --no-data --skip-dump-date --databases test | sed -e "s/AUTO_INCREMENT=[0-9]* //" | md5sum


mysqldump --no-data --skip-lock-tables --skip-dump-date --skip-comments

LOAD DATA LOCAL INFILE 'mbdump/artist' INTO TABLE artist FIELDS TERMINATED BY '\t' ESCAPED BY '\\' LINES TERMINATED BY '\n';


CREATE TABLE artist_credit_name (
    artist_credit INTEGER NOT NULL,
    position SMALLINT NOT NULL,
    artist INTEGER NOT NULL,
    name INTEGER NOT NULL,
    join_phrase TEXT NULL,
PRIMARY KEY (artist_credit,position),
INDEX (artist),
INDEX (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


DELIMITER $$
DROP PROCEDURE IF EXISTS new_artist$$
CREATE PROCEDURE new_artist(p_artist_id INT)
BEGIN
END$$

-- set variable
SET @schema = IFNULL(@schema,DATABASE());
SELECT NOW(), VERSION();

# Per Schema Queries
SET @schema = IFNULL(@schema,DATABASE());

# One Line Schema Summary
SELECT table_schema,
         SUM(data_length+index_length)/1024/1024 AS total_mb,
         SUM(data_length)/1024/1024 AS data_mb,
         SUM(index_length)/1024/1024 AS index_mb,
         COUNT(*) AS tables,
         CURDATE() AS today
FROM information_schema.tables
WHERE table_schema=@schema
GROUP BY table_schema;

# Schema Table Usage
SELECT if(length(table_name)>20,concat(left(table_name,18),'..'),table_name) AS table_name,
         engine,row_format as format, table_rows, avg_row_length as avg_row,
         round((data_length+index_length)/1024/1024,2) as total_mb,
         round((data_length)/1024/1024,2) as data_mb,
         round((index_length)/1024/1024,2) as index_mb
FROM information_schema.tables
WHERE table_schema=@schema
ORDER BY 6 DESC;

top  prev  next 

Space Usage Calculation

select ROUTINE_SCHEMA,ROUTINE_NAME,ROUTINE_TYPE from information_schema.routines where ROUTINE_NAME='GET_LOCK';

SELECT * FROM information_schema.tables WHERE table_schema = DATABASE();

SELECT table_name,Engine,Version,Row_format,table_rows,Avg_row_length,
Data_length,Max_data_length,Index_length,Data_free,Auto_increment,
Create_time,Update_time,Check_time,table_collation,Checksum,
Create_options,table_comment FROM information_schema.tables
WHERE table_schema = DATABASE();


SELECT table_name,Engine,Version,Row_format,table_rows,Avg_row_length,
Data_length,Max_data_length,Index_length,Data_free,Auto_increment,
Create_time,Update_time,Check_time,table_collation,Checksum,
Create_options,table_comment FROM information_schema.tables
WHERE table_schema = 'mysql';

top  prev  next 

Trouble Shooting Tricks

Trouble Shooting
1): mysql: Cannot load from mysql.proc. The table is probably corrupted
SHOW FUNCTION STATUS WHERE Db = 'mysql';

mysql -V

mysql_upgrade -uroot -p --> mysql already upgrade, please use the force option
mysql_upgrade -uroot -p --force


http://serverfault.com/questions/361838/mysql-cannot-load-from-mysql-proc-the-table-is-probably-corrupted


2): 
mysqld: unknown variable 'defaults-file=

mysqld: unknown variable mysqld: unknown variable defaults-file/defaults-extra
this can be fixed by setting the --defaults-file option at the beginning of the options list!!!!!weird, but works :)



3): skip grant table

http://blog.dotkam.com/2007/04/10/mysql-reset-lost-root-password/

mysqld_safe --skip-grant-tables &

mysqld --defaults-file="c:\mysql\my.ini" --init-file=c:\\init.txt

--skip-grant-tables  --skip-networking
mysql_upgrade


http://dev.mysql.com/doc/refman/5.6/en/resetting-permissions.html

--init-file=

-- --------------



This installation of MySQL is already upgraded to 5.6.10, use --force if you still need to run mysql_upgrade
$ mysql_upgrade -uroot -p`cat ${CFG_LOC}/.pswd` -S ${SOCKET_FILE} --force



4):
show table;
show table status;

select TABLE_SCHEMA, TABLE_NAME, ENGINE from information_schema.tables order by TABLE_SCHEMA, TABLE_NAME, ENGINE;


top  prev  next 

Communication Error fix

set global max_allowed_packet=18777216;

show variables like 'max_allowed_packet';
 
show variables like 'net_%';
net_write_timeout=60; # default values
net_read_timeout=30;  # default values

set global net_read_timeout=300;

top