mysqldump – Couldn’t read status information for table general_log ()

Na jednom z linuxových serverů jsem narazil na problém při „dumpování“ databází. Script v cronu, který mi zálohuje databáze

#!/bin/bash
date=`date -I`
mysqldump -u -p --all-databases | gzip > /mnt/zalohy/database/mysql-$date.sql.gz


 

Vše vypadalo jako by nic, jen to při záloze mysql spadlo a tedy další databáze se nezálohovali, mysql byla první takže se nic nezálohovalo.Řešení je jednoduché, jen prostě třeba potřebné tabulky založit jednoduše těmito řádky

CREATE TABLE IF NOT EXISTS general_log (
event_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
user_host mediumtext NOT NULL,
thread_id int(11) NOT NULL,
server_id int(10) unsigned NOT NULL,
command_type varchar(64) NOT NULL,
argument mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT=’General log’;

CREATE TABLE IF NOT EXISTS slow_log (
start_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
user_host mediumtext NOT NULL,
query_time time NOT NULL,
lock_time time NOT NULL,
rows_sent int(11) NOT NULL,
rows_examined int(11) NOT NULL,
db varchar(512) NOT NULL,
last_insert_id int(11) NOT NULL,
insert_id int(11) NOT NULL,
server_id int(10) unsigned NOT NULL,
sql_text mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT=’Slow log’;

Toto vyřeší problém avšak pokud budete volat příkaz FLUSH PRIVILEGES tak to spadne na další chybě nějak takto:

mysql: flush privileges;
ERROR 1146 (42S02): Table ‘mysql.servers’ doesn’t exist

I na to je zde rada … jednoduše založit tabulku po které mysql prahne, nějak takto

CREATE TABLE IF NOT EXIST servers (
Server_name char(64) NOT NULL,
Host char(64) NOT NULL,
Db char(64) NOT NULL,
Username char(64) NOT NULL,
Password char(64) NOT NULL,
Port int(4) DEFAULT NULL,
Socket char(64) DEFAULT NULL,
Wrapper char(64) NOT NULL,
Owner char(64) NOT NULL,
PRIMARY KEY (Server_name)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

No a teď už vše šlape jak má :)

Ještě pro doplnění, obnovu databáze pak provádím příkazem:
mysql -u root -p < all_dbs.sql