[MySQL] 테이블 복구(How To Repair Corrupted MySQL Tables)

문제 1 : MySQL과 WordPress으로 운영되는 블로그에서 백업이 안 된다.
조치 1 : phpMyAdmin에서 복구 명령을 실행시켰다.

문제 2 : phpMyAdmin에서 테이블에 “사용중”이란 메시지만 나타났다. 또한, “복구”명령에서 에러가 떴다.
조치 2 : MySQL을 멈추기 위해서 다음과 같이 명령을 입력했다.
[shell]~$ sudo /etc/init.d/mysql stop
* Stopping MySQL database server mysqld [fail][/shell]

문제 3 : mysqld를 멈출 수 없다.
조치 3 : 다음 명령어를 입력했으나, 멈추지 않았다.
[shell]mysqladmin -u root -p shutdown[/shell]

문제 4 : mysqld를 멈출 수 없다.
조치 4 : 명령어를 다음과 같이 입력했다. 드디어 멈췄다.(ubuntu 14.04)
[shell]$ sudo service mysql stop
mysql stop/waiting[/shell]

문제 5 : myisamchk를 이용하여 복구하려 했으나 다음과 같은 메시지가 떴다.
[shell]$ sudo myisamchk *.MYI
Checking MyISAM file: wp_commentmeta.MYI
Data records: 4 Deleted blocks: 0
myisamchk: warning: Table is marked as crashed and last repair failed
– check file-size
– check record delete-chain
– check key delete-chain
– check index reference
– check data record references index: 1
– check data record references index: 2
– check data record references index: 3
– check record links
MyISAM-table ‘wp_commentmeta.MYI’ is usable but should be fixed[/shell]

조치 5 : myisamchk를 통해 복구를 시도했다.
[shell]$ sudo myisamchk -r wp_commentmeta.MYI
– recovering (with sort) MyISAM-table ‘wp_commentmeta.MYI’
Data records: 4
myisamchk: error: Can’t create new tempfile: ‘wp_commentmeta.TMD’
MyISAM-table ‘wp_commentmeta.MYI’ is not fixed because of errors
Try fixing it by using the –safe-recover (-o), the –force (-f) option or by not using the –quick (-q) flag
[/shell]

문제 6 : 에러 메시지 “error: Can’t create new tempfile”가 나타나고 복구가 되지 않았다.
조치 6 : 강제 복구 명령어를 입력했다.
[shell]$ sudo myisamchk -f wp_commentmeta.MYI
Checking MyISAM file: wp_commentmeta.MYI
Data records: 4 Deleted blocks: 0
myisamchk: warning: Table is marked as crashed and last repair failed
– check file-size
– check record delete-chain
– check key delete-chain
– check index reference
– check data record references index: 1
– check data record references index: 2
– check data record references index: 3
– check record links
– recovering (with sort) MyISAM-table ‘wp_commentmeta.MYI’
Data records: 4
– Fixing index 1
– Fixing index 2
– Fixing index 3[/shell]

조치 7 : 드디어 모든 테이블을 복구했다. 그래서 mysql을 재실행하다.
[shell]$ sudo service mysql start[/shell]

<교훈(lessons)>
1. ubuntu 14.04에서 MySQL를 멈추거나 실행하기 위해서는 다음과 같은 명령어를 입력한다.
[shell]$ sudo service mysql stop
$ sudo service mysql start[/shell]
2. 테이블를 복구하기 위해서는 myisamchk명령어를 이용한다.
[shell]$ sudo myisamchk -r wp_commentmeta.MYI
$ sudo myisamchk -f wp_commentmeta.MYI[/shell]

[mac]Apache, MySQL, PHP, phpMyAdmin 설정

MySQL‬ 을 ‎Yosemite‬(‪‎요세미티‬)에 설치하기
문제 1 : 현재의 최신 버전 MySQL 5.6.21은 매버릭스(Mac OS X 10.9)까지만 지원해서 설치시 오류 메시지가 발생한다.
해결 1 : 설치시 “사용자화(custom install)”를 선택해서 “start up item”을 체크해제하여야 한다.(http://coolestguidesontheplanet.com/get-apache-mysql-php-p…/)
문제 2 : MySQL이 요세미티에서는 맥 시작시 자동으로 실행되지 않고, 수동으로 실행시켜줘야 한다.
해결 2 : 아래 링크된 페이지(http://stackoverflow.com/questions/26476391/how-to-auto-load-mysql-on-startup-on-osx-yosemite)에서 소개하는 /Library/LaunchDaemons/com.mysql.mysql.plist 파일을 만든 다음, launchctl에 추가한다.

-다음의 파일 만들기
/Library/LaunchDaemons/com.mysql.mysql.plist
[shell]

KeepAlive
Label
com.mysql.mysqld
ProgramArguments

/usr/local/mysql/bin/mysqld_safe
–user=mysql

[/shell]

launchctl에 추가하기
[shell]
sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
sudo chmod 644 /Library/LaunchDaemons/com.mysql.mysql.plist
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
[/shell]

우분투 11.10 mysql에서 DB파일의 위치를 변경 방법

<개요>
데이터베이스의 저장 장소를 별도로 하는 경우가 많다. 그러면 해당 DBMS가 그 위치를 알게 할 필요가 있다.
현재 학과 mySQL를 자료를 /home/mysql 에 보관하고 있다. 자료를 별도의 파티션에 두고 여기를 /home으로 마운트했다. 이렇게 하면 시스템을 소위 엎어도 다시 복구하기가 편하다.
우분투 11.10은 /var/lib/mysql 에 자료를 저장하고 있다. 따라서 이 위치를 변경해줘야 학과 자료를 읽어올 수 있다.

<가정>
데이터베이스 위치 : /home/mysql

<진행>1. mysql를 정지시킨다
[shell]$sudo /etc/init.d/mysql stop[/shell]
2. /etc/mysql/my.cnf를 다음과 같이 수정한다.
변경 전
[vim]datadir = /var/lib/mysql[/vim]
변경 후
[vim]datadir = /home/mysql[/vim]
3. /etc/apparmor.d/usr.sbin.mysqld를 수정한다.
변경 전
[vim]/var/lib/mysql/ r,
/var/lib/mysql/** rwk,[/vim]
변경 후
[vim]  /home/mysql/ r,
/home/mysql/** rwk,[/vim]
4. 변경된 내용을 반영시킨다.
[shell]$sudo /etc/init.d/apparmor restart[/shell]
5. 다시 mySQL를 재시동한다.
[shell]$sudo /etc/init.d/mysql start[/shell]

<참고문헌>
원문 : http://suminstory.tistory.com/114
** 원문에서는 우분투 8.04였으나, 11.10에서도 무난히 작동한다.

Mac OS X에서 MySQL을 삭제하기

How to remove MySQL on Mac OS X
출처 : JohnCosta

[shell]sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*

vim /etc/hostconfig # and remove the line MYSQLCOM=-YES[/shell]

Mac OS X Lion Web Server 구축기

– 기존 서버의 내용을 백업한다.(첨부파일까지 포함)
– 기존의 컴퓨터를 대신한 새 컴퓨터에 IP 할당하기
 서버관리자에게 새 컴퓨터의 MAC address를 알려준다.

– 서버 앱에서 웹 사이트를 추가한다. (-> virtual hosts를 설정하는 것임)
– www.solarview.net의 파일 저장 위치에 텍스트큐브(textcube 1.8.6)복사해 놓는다.
– MySQL를 설치하기(MySQL Community Server 5.5.19)
– MySQL에 데이터베이스와 계정을 추가한다.(MySQL 계정추가하기)
– 웹브라우저로 www.solarview.net을 접속한다.
– 텍스트큐브 설치를 한다. 그런데  MySQL에 접속이 안 된다. (1차 실패)
– MySQL의 소켓 경로를 고친다.(Lion Server : MySQL용 PHP 구성)
– 텍스트큐브를 위한 php.ini를 수정한다.(  AllowOverride FileInfo로 수정)
– 텍스트큐브를 설치한다.  테이블을 생성할 수 없다.(2차 실패)
– tc 1.8.6은 MySQL 5.5에서 오류가 발생한단다. 향후 1.8.7에서는 수정한단다.(텍스트큐브 1.8.6)
– MySQL 5.5를 삭제한다. (Removing MySQL from OSX Lion)
– MySQL를 설치하기(MySQL Community Server 5.1.60)

– 텍스트큐브를 설치한다. (성공)
– 블로그 자료를 복구한다. (파일 용량이 크므로 웹에서 복원을 선택)

<결론>
Mac OSX Lion에 텍스트큐브 1.8.6으로 홈페이지를 구성하려면,
MySQL의 최신버전이 아닌 5.1 버전을 설치하고,
Lion에서는 MySQL의 소켓 위치 바꿔주어야 한다.

MySQL에 계정(account)과 DB 추가하기 – 스크립트(script)

출처 : http://www.fduser.org/blog/67

!/bin/sh

#!/bin/sh
echo "추가할 db명을 입력하고 엔터를 치세요."
read db
sleep 1
echo " "
echo "사용할 db user명을 입력하고 엔터를 치세요"
read db_user
sleep 1
echo " "
echo "$db_user계정에서 사용할 패스워드를 입력하고 엔터를 치세요"
read passwd
sleep 1
echo " "
echo "create database $db;" >> query
echo "use mysql;" >> query
echo "insert into user (host,user,password) values('localhost','$db_user',password('$passwd'));" >> query
echo "insert into db values('localhost','$db','$db_user','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');" >> query
echo "flush privileges" >> query
echo "mysql root계정의 패스워드를 입력 하세요."
sleep 1
echo "mysql root계정의 패스워드가 설정되어 있지 않다면, 그냥 엔터를 치세요"
if /usr/local/mysql/bin/mysql -u root -p < query; 
then echo " " 
sleep 1 
echo "mysql db 및 계정이 추가 완료되었습니다. 아래와 같이 접속을 하세요." 
sleep 1 
echo " " 
echo "/usr/local/mysql/bin/mysql -u $db_user -p $db" 
echo " " else echo " " 
echo "DB 생성에 실패 하였습니다. ERROR 라인을 확인 하시고 다시 시도하세요." 
echo " " 
fi 
rm -rf query

MySQL에 계정(account)과 DB 추가하기

출처 : http://www.fduser.org/blog/30

1. mysql Database에 root 권한으로 접속 한다.

[shell][root@localhost root]# /usr/local/mysql/bin/mysql -u root -p[/shell]

2. mysql db를 선택한다.

[shell]mysql> use mysql;[/shell]

3. mysql db의 user테이블에 사용할계정과 패스워드를 입력한다.

[shell]mysql> insert into user (host,user,password) values(‘localhost’,’계정’,password(‘패스워드’));[/shell]

4. mydql db의 db테이블의 필드수 확인.

[shell]mysql> desc db;

+—————–+—————–+——+—–+———+——-+

| Field                  | Type                  | Null  | Key  | Default   |  Extra |

+—————–+—————–+——+—–+———+——-+

| Host                  | char(60) binary    |         | PRI |              |          |

| Db                     | char(64) binary   |         | PRI  |              |          |

| User                  | char(16) binary    |         | PRI |              |          |

| Select_priv         | enum(‘N’,’Y’)      |         |       |     N       |          |

| Insert_priv          | enum(‘N’,’Y’)      |         |       |     N       |          |

| Update_priv        | enum(‘N’,’Y’)      |         |       |     N       |          |

| Delete_priv         | enum(‘N’,’Y’)      |         |       |     N       |          |

| Create_priv         | enum(‘N’,’Y’)     |          |       |     N       |          |

| Drop_priv           | enum(‘N’,’Y’)      |         |       |     N       |          |

| Grant_priv          | enum(‘N’,’Y’)      |         |       |     N       |          |

| References_priv  | enum(‘N’,’Y’)      |         |       |     N       |          |

| Index_priv          | enum(‘N’,’Y’)      |         |        |     N       |          |

| Alter_priv           | enum(‘N’,’Y’)      |         |        |     N       |          |

+—————–+—————–+——+—–+———+——-+

13 rows in set (0.01 sec)[/shell]

5. mysql db의 db 테이블에 사용할 db와 계정을 연결시키고 db테이블의 필드 수만큼, 접근권한을 부여한다. (Default 필드의 N 의 수만큼 y를 입력)

[shell]mysql> insert into db values(‘localhost’,’db명’,’계정’,’y’,’y’,’y’,’y’,’y’,’y’,’y’,’y’,’y’,’y’);[/shell]

6. 추가한 내용을 적용시킨다.

[shell]mysql> flush privileges;[/shell]

7. shell 상에서 mysql 접속 테스트.

[shell][root@localhost root]# /usr/local/mysql/bin/mysql -u 계정 -p db명[/shell]