Шпаргалка по MySQL

  • 3 марта, 14:11
  • 6684
  • 0

У даній шпаргалці по MySQL ми розповімо про скидання пароля mysql, скріпт для додавання користувача, як показати всіх користувачів і інше.

Коннект до mysql по TCP

mysql --user root --host localhost --port 3306 --protocol tcp

Створити БД

CREATE DATABASE $DB_NAME character set utf8;

Додати користувача

CREATE USER $DB_USER@localhost IDENTIFIED BY '$DB_PASSWORD';

Дати права користувачеві на БД

GRANT ALL ON $DB_NAME.* TO $DB_USER@localhost;

  • на віддалений доступ:

GRANT ALL PRIVILEGES ON $DB_NAME.* TO $DB_USER@'%' IDENTIFIED BY '$DB_PASSWORD'

  • на віддалений доступ на всі таблиці:

grant all privileges on *.* to DB_USER@'%';

Змінити пароль користувачу

SET PASSWORD FOR логин@localhost = PASSWORD('пароль'); SET PASSWORD FOR логин@"%" = PASSWORD('пароль');

  • що б права вступили в силу:

flush privileges;

Подивитися права користувача

SHOW GRANTS for $DB_USER@localhost;

Якщо потрібно залити великий дамп, то в /etc/my.cnf в секцію [mysqld] додати:

max_allowed_packet = 16M

Робота з кластером майстер-слейв

  • подивитися стан майстра:

show master status;

  • подивитися стан слейва:

SHOW SLAVE STATUS\G

Подивитися структури таблиці в БД

describe <table_name>;

або

SHOW CREATE TABLE <table_name>;

Подивитися стан таблиць в БД

SHOW TABLE STATUS;

Є ще краще спосіб:

DELIMITER $$  DROP PROCEDURE IF EXISTS `tools`.`sp_status` $$  CREATE PROCEDURE `tools`.`sp_status`(dbname VARCHAR(50))  BEGIN   -- Obtaining tables and views  (      SELECT        TABLE_NAME AS `Table Name`,        ENGINE AS `Engine`,       TABLE_ROWS AS `Rows`,       CONCAT(          (FORMAT((DATA_LENGTH + INDEX_LENGTH) / POWER(1024,2),2))          , ' Mb'         AS `Size`,       TABLE_COLLATION AS `Collation`      FROM information_schema.TABLES      WHERE TABLES.TABLE_SCHEMA = dbname            AND TABLES.TABLE_TYPE = 'BASE TABLE'  )  UNION  (      SELECT        TABLE_NAME AS `Table Name`,        '[VIEW]' AS `Engine`,       '-' AS `Rows`,       '-' `Size`,       '-' AS `Collation`      FROM information_schema.TABLES      WHERE TABLES.TABLE_SCHEMA = dbname             AND TABLES.TABLE_TYPE = 'VIEW'  )  ORDER BY 1;  -- Obtaining functions, procedures and triggers  (      SELECT ROUTINE_NAME AS `Routine Name`,        ROUTINE_TYPE AS `Type`,       '' AS `Comment`      FROM information_schema.ROUTINES      WHERE ROUTINE_SCHEMA = dbname      ORDER BY ROUTINES.ROUTINE_TYPE, ROUTINES.ROUTINE_NAME  )  UNION  (      SELECT TRIGGER_NAME,'TRIGGER' AS `Type`,       concat('On ',EVENT_MANIPULATION,': ',EVENT_OBJECT_TABLE) AS `Comment`      FROM information_schema.TRIGGERS      WHERE EVENT_OBJECT_SCHEMA = dbname  )  ORDER BY 2,1;  END$$  DELIMITER ;

Скидання пароля mysql

1) У  /etc/mycnf в секцію [mysqld] вставляємо рядок  skip-grant-tables

2) Перезапустити mysqld.

Після цього пароль буде скинутий і можна ввести будь-який інший.

Cкріпт для додавання користувача

mysql-add_user:

#!/bin/bash if [ $# -lt 3 ]; then     echo "Usage: mysql-add_user <user> <password> <database>"     exit fi USER=$1 PASS=$2 DB=$3 echo "CREATE USER $USER@localhost IDENTIFIED BY '$PASS';" echo "CREATE USER $USER@localhost IDENTIFIED BY '$PASS';" | mysql echo "GRANT ALL ON $DB.* TO $USER@localhost" echo "GRANT ALL ON $DB.* TO $USER@localhost" | mysql echo "GRANT ALL ON  $DB.* TO $USER@'%' IDENTIFIED BY '$PASS';" echo "GRANT ALL ON  $DB.* TO $USER@'%' IDENTIFIED BY '$PASS';" | mysql echo "flush privileges;" echo "flush privileges;" | mysql echo "Done!"

Додати індекс в таблицю wp_options по полю autoload

ALTER TABLE wp_options ADD INDEX (`autoload`);

Показати індекси для таблиці

SHOW INDEXES FROM wp_options;

Дізнатися як виконується запит і які індекси використовує

EXPLAIN SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';

Показати всіх користувачів

SELECT User,Host FROM mysql.user;

Те ж саме, але відразу в форматі, який можна використовувати в DROP user:

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;

Видалити користувача

Станом на MySQL 5.0.2 ви можете видалити обліковий запис наступним чином: DROP USER user; 

Вивести результат в файл:

mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/passwd.txt' -> FIELDS TERMINATED BY ',' ENCLOSED BY '"' -> LINES TERMINATED BY '\r\n';

Запис логу всіх запитів до БД

вивід лога в таблицю (в БД mysql):

CREATE TABLE `general_log` ( `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP                       ON UPDATE CURRENT_TIMESTAMP, `user_host` mediumtext NOT NULL, `thread_id` bigint(21) unsigned 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';

Увімкнути журнал запитів у базі даних

SET global log_output = 'таблиця' ; SET global general_log = 1 ;

Переглянути журнал

select * from mysql.general_log

Вимкнути журнал запитів у базі даних

SET global general_log = 0 ;

Вивід лога в файл:

SET global log_output = 'FILE'; SET global general_log_file='/Applications/MAMP/logs/mysql_general.log'; SET global general_log = 1;

Визначити розмір бази MYSQL

команда:

SELECT SUM( data_length + index_length ) AS 'size' FROM information_schema.TABLES WHERE table_schema = 'mydatabase' LIMIT 1;

Або скрипт mysql-db_size:

#!/bin/bash if [ $# -lt 1 ]; then     echo "Usage: mysql-db_lenth <database>"     exit fi DB=$1 LENTH=`echo "SELECT SUM( data_length + index_length ) AS 'size' FROM information_schema.TABLES WHERE table_schema = '$DB' LIMIT 1;" | mysql | sed -n '2p;2q'` let LENTH_MB=$LENTH/1024/1024 let LENTH_GB=$LENTH_MB/1024 echo "$LENTH_GB Gb" echo "$LENTH_MB Mb" echo "$LENTH b"

Показати розмір таблиць в БД

SELECT TABLE_NAME, (data_length+index_length)/1024/1024/1024 as "size, Gb" FROM information_schema.TABLES WHERE table_schema = '<database>' order by "size, Gb";

скрипт table_sizes.sh

#!/bin/bash if [ $# -lt 1 ]; then     echo "Usage: ./table_sizes.sh <database>"     exit fi DB=$1 echo "SELECT TABLE_NAME, (data_length+index_length)/1024/1024/1024 as 'size, Gb' FROM information_schema.TABLES WHERE table_schema = '$DB'" | mysql

Скрипт резервного копіювання всіх баз на сервері

#!/bin/bash TIMESTAMP=`date +"%Y%m%d"` BACKUPSTORE=/root/backup/dumps FILENAME="mysql-full-dump.${TIMESTAMP}.bz2" BACKUP_OWNER=root RETENTION=90 # days /usr/bin/mysqldump --all-databases --flush-logs --force --add-drop-database | bzip2 -s > $BACKUPSTORE/$FILENAME chown $BACKUP_OWNER $BACKUPSTORE/$FILENAME find $BACKUPSTORE -ctime +$RETENTION -delete

Прибрати заголовки у виводі mysql

mysql --skip-column-names

Вивід всіх запитів в лог

SET GLOBAL general_log_file = "/tmp/sql.log" ; SET GLOBAL general_log = 'ON' ; SET GLOBAL general_log = 'OFF' ;


0 комментариев
Сортировка:
Добавить комментарий

IT Новости

Смотреть все