Export a import dat
Export dat (mysqldump)
mysqldump --user=USERNAME --password=PASSWORD -A > file.sql
Import dat (z dumpu)
mysql -h localhost -u ROOT -pPASSWORD --default-character-set=utf8 < file.sql
Import přímo ze gzipovaného souboru:
gunzip < dumpfile.sql.gz | mysql
Binární data MySQL
Adresář /var/lib/mysql/data obsahuje binární data MySQL. Po startu mysqld si démon natáhne data z těchto binárek (vloží si je do systémové databáze information_schema), takže pomocí této složky je možné zálohování nebo import dat.
MyISAM má data v podsložkách s názvem tabulky. V nich jsou soubory .frm (struktura tabulky), .MYD data a v .MYI indexy tabulky.
InnoDB má v podsložkách s názvem tabulky jen soubory .frm se strukturou tabulky. Data a indexy jsou uchvána přímo ve složce data v souborech idb*. Ty mají všechny stejnou velikost 4GB. (občas může být ale struktura stejná jako u MyISAM ?!?!)
Nastavení přístupu uživatele do DB
GRANT ALL ON dbname.* TO 'username'@'localhost' IDENTIFIED BY 'password';
Removing privileges:
REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';
DROP USER 'phpmyadmin'@'localhost';
Change root password
/www/mysql/bin/mysqladmin -u root password 'sklik'
/www/mysql/bin/mysql_secure_installation
Problémy se startem mysqld - socket file, pid file
Tradiční problém.. Je potřeba si pohrát s tím souborem mysql.sock - vytvořit ho, stopnout službu, spustit ji znova... Vytvoření mysql.sock souboru a nastavení práv k němu:
cd /var/lib/mysql/
touch mysql.sock && chmod +x mysql.sock && chown mysql:mysql -R mysql.sock
Když to nepomůže:
- mrknout do mysql logů;-)
- několikrát zopakovat s kombinacemi service mysql stop/start :)
- smazat nebo naopak vložit pid mysql do PID file
- zkontrolovat oprávnění skupiny mysql (např. přidat uživatele mysql do skupiy root) pro zápis do složky s PID a sock soubory
- hodit si mašlu
Další tipy
Konfigurák, globální proměnné
Konfigurák bývá v /etc/mysql/my.conf. Který se reálně načítá je možné zjsitit z mysqld:
/usr/sbin/mysqld --verbose
Globální proměnné (z něj) jsou při běhu ymsqld uložené v interní DB mysql, dají se číst i přepisovat takto:
SET @@global.max_allowed_packet = 500*1024*1024;
SELECT @@global.max_allowed_packet;
Konkrétně max_allowed_packet je možná nutné nastavit i při importu pro proces mysql (tj. nestačí aby byl nastavený u mysqld):
mysql --max_allowed_packet=500M -u root -p database < dump.sql
Vygenerování CSV souboru
SELECT ... INTO OUTFILE '%s' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
Load data from CSV file
LOAD DATA INFILE 'file.csv'
INTO TABLE t1
(column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
Náhrada textu v určitém sloupci tabulky:
update [table_name] set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]') where condition;
Přehlednější výpis dat z tabulek s mnoha sloupci:
SELECT * FROM tablename WHERE id = 123\G
Automaticke přepínání vertikálního režimu po celou dobu práce:
mysql --auto-vertical-output