Useful MySQL commands ร -

Other MySql
์ตœ์ข… ์—…๋ฐ์ดํŠธ: Apr 22 2010


Korean translation by Seungyoon Lee.


MySQL์€ MYSQL AB ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ๋ฐฐ์šฐ ๊ฐ•๋ ฅํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ์‹œ์žฅ ์—์„œ ๊ฐ€์žฅ ์ž˜ ๋‚˜๊ฐ€๋Š” ๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜์ด์ฃ .
MySQL์— ๋Œ€ํ•ด ๋ณด๋‹ค ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„ํ‚คํ”ผ๋””์•„ ์›น์‚ฌ์ดํŠธ ๋ฅผ ๋ด ์ฃผ์‹ญ์‹œ์š”.

logo mysql ์ด ๊ธ€์—์„œ๋Š” MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ทธ๊ฒƒ์„ ๋ฐฑ์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
MySQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ž์„ธํ•œ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด MySQL ์›น์‚ฌ์ดํŠธ ๋ฅผ ์ฐพ์•„๊ฐ€ ์ฃผ์„ธ์š”.

MySQL ์—์„œ๋Š” ISAM, MyISAM, HEAP, InnoDB ๊ทธ๋ฆฌ๊ณ  Berkeley์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ…Œ์ด๋ธ” ์—”์ง„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ…Œ์ด๋ธ”์€ MyISAM ํ…Œ์ด๋ธ” ์—”์ง„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. MyISAM ํ…Œ์ด๋ธ” ์—”์  ์€ /var/lib/mysql/database_name/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— 3๊ฐœ์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. MyISAM ํ…Œ์ด๋ธ”์ด ์—”์ง„์— ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
table_name.mrd
table_name..myd
table_name..myi
- ๊ตฌ์กฐ (structure)
- ๋ฐ์ดํ„ฐ(data)
- ์ธ๋ฑ์Šค (index)


1. ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค
2. ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋“ค
3. ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณต์›
4. MySQL ๋ฐฑ์—…


๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค

Phpmyadmin ์€ MySQL์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ค‘์—์„œ ๊ฐ€์žฅ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค. Phpmyadmin ์€ PHP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„ํŒŒ์น˜ ์›น ์„œ๋ฒ„๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
Phpmyadmin ์€ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ…Œ์ด๋ธ”, ๊ทธ๋ฆฌ๊ณ  MySQL ์„œ๋ฒ„ ๊ทธ ์ž์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์ต์ˆ™์น˜ ๋ชปํ•œ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Phpmyadmin ํˆด์„ ์„ค์น˜ํ•˜์‹œ๊ธธ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค. apt-get์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ๋ˆ…์Šค์ƒ์—์„œ ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Phpmyadmin์„ ์„ค์น˜ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#apt-get install phpmyadmin


๊ธฐ๋ณธ ๋ช…๋ น์–ด๋“ค

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์„ค์ •๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์—†์Šต๋‹ˆ๋‹ค. MySQL์„ ์„ค์น˜ํ•œ ๋’ค ๊ฐ€์žฅ ์ฒ˜์Œ ํ•ด์•ผ ํ•  ๊ฒƒ์€ ๋ฐ”๋กœ ๋ฃจํŠธ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝํ•˜๊ธฐ:

#mysqladmin -u root password new_root_password
์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ:

#mysqladmin -u root -p create database_name
SQL ํŒŒ์ผ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋„ฃ๊ธฐ.(SQL ํŒŒ์ผ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ SQL ๋ฌธ์ด ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.)

#mysql -u root -p database_name < file.sql
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์†ํ•˜์—ฌ ์–ด๋–ค ์‚ฌ์šฉ์ž(newuser)์—๊ฒŒ ์„ ํƒ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(database_name)์— ๋Œ€ํ•ด ๋ชจ๋“  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ:

#mysql -u root -p database_name
>grant all on database_name.* to newuser@localhost identified by 'userpassword';
>flush privileges;
>exit
์„ ํƒ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(database_name)์— ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”์˜ ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ. ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ํ…Œ์ด๋ธ”(table_name)์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋ณด๊ธฐ:

#mysql -u root -p
>use database_name;
>show tables;
>select * from table_name;
MySQL์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๊ธฐ:

#mysql -u root -p
>use mysql;
>select * from user;
MySQL ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ธฐ:

#/etc/init.d/mysql restart
MySQL ์„ค์ •์„ ๋‹ค์‹œ ์ ์šฉํ•˜๊ธฐ:

#/etc/init.d/mysql reload


๋ฃจํŠธ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณต์›ํ•˜๊ธฐ

MySQL ์ •์ง€ํ•˜๊ธฐ:

#/etc/init.d/mysql stop
๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด MySQL ์„œ๋ฒ„ ์‹œ์ž‘ํ•˜๊ธฐ:

#mysqld_safe --skip-grant-tables &
MySQL ์— ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธํ•˜๊ธฐ:

#mysql -u root
>use mysql;
>update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
>flush privileges;
>quit
MySQL ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ํ•˜๊ธฐ:

#/etc/init.d/mysql restart
์ƒˆ๋กœ ์„ค์ •ํ•œ ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ…Œ์ŠคํŠธ ํ•ด๋ด…์‹œ๋‹ค:

# mysql -u root -p


MySQL ๋ฐฑ์—…

๋‹น์‹ ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐฑ์—…๋ฐ›๊ธฐ:
์ธ์ˆ˜ : -u = ์‚ฌ์šฉ์ž, -p = ๋น„๋ฐ€๋ฒˆํ˜ธ(-p ํ‚ค์›Œ๋“œ์™€ ์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์ด์—๋Š” ๊ณต๋ฐฑ์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

#mysqldump -u root -prootpassword --all-databases > mysql_databases_backup.sql
ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐฑ์—…๋ฐ›๊ธฐ:

#mysqldump -u root -prootpasssword --databases database_name > mysql_database_backup.sql
mysqldump ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ๋ณด๋‹ค ์ž์„ธํ•œ ์„ค๋ช….

MySQL ๋ฐฑ์—…์„ ๋ณต๊ตฌํ•˜๊ธฐ:

#mysql -u root -proot < sql_backup.sql
๊ฐ•์กฐ : MySQL ๋ฐฑ์—…์—์„œ ์‚ฌ์šฉ์ž ๊ณ„์ • ์ •๋ณด๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ์ •๋ณด๋Š” mysql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ user ํ…Œ์ด๋ธ”์— ๋ณ„๋„๋กœ ์ €์žฅ๋˜๋ฏ€๋กœ mysql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋”ฐ๋กœ ๋ฐฑ์—…๋ฐ›๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.


์•„๋ž˜๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐฑ์—…ํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

์šฐ์„  ๋ฐฑ์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํžˆ ์ œํ•œ๋œ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

#mysql -u root -p
>GRANT SELECT , SHOW DATABASES , LOCK TABLES ON * . * TO backupuser@localhost IDENTIFIED BY 'password' ;
๊ทธ๋ฆฌ๊ณ  mysqlbackup.sh ์ด๋ผ๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์ œ์—์„œ /home/sam ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ sam์€ ๋‹น์‹ ์ด ์„ ํƒํ•œ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.

#vi /home/sam/mysqlbackup.sh
date=`date -I`; mysqldump --all-databases -u backupuser --password="password" > databasebackup-$date.sql
๋ฐฑ์—…์„ ์‹คํ–‰ํ•œ ๋‚ ์งœ๊ฐ€ ํŒŒ์ผ๋ช… ๋’ค์— ์ถ”๊ฐ€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2007๋…„ 1์›” 4์•Œ์ด๋ผ๋ฉด ํŒŒ์ผ๋ช…์€ databasebackup-2007-01-04.sql์ด ๋  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

#chown sam /home/sam/mysqlbackup.sh
#chmod 700 /home/sam/mysqlbackup.sh
๋ฐฑ์—… ํŒŒ์ผ์— ์ ๋‹นํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•ฉ์‹œ๋‹ค. ํŒŒ์ผ ์†Œ์œ ์ž๋Š” ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ–๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.(์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์‹คํ–‰)

์„ธ ๋ฒˆ์งธ๋กœ ๋ฆฌ๋ˆ…์Šค ์‚ฌ์šฉ์ž์˜ crontab ํŒŒ์ผ์— ์•„๋ž˜์˜ ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

#crontab -e -u sam
30 00 * * * /home/sam/mysqlbackup.sh
mysqlbackup ์‰˜ ํŒŒ์ผ์€ ๋งค์ผ 0์‹œ 30๋ถ„์— ์‹คํ–‰๋˜๋ฉฐ MySQL์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋“ค์„ ๋ฐฑ์—…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.