error while loading shared libraries: libmysqlclient.so.10: cannot open shared object file: No such file or directory

리눅스/MySQL|2015. 1. 16. 11:08
반응형

error while loading shared libraries: libmysqlclient.so.10: cannot open shared object file: No such file or directory

 
1. libmysqlclient.so.10 파일을 find로 찾아 라이브러리 패스에 추가
# vi /etc/profile
export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql:LD_LIBRARY_PATH
2. 라이브러리가 설치되어 있지 않다면 Mysql Shared-library 설치. (http://downloads.mysql.com/archives.php)
# rpm -ivh MySQL-shared-3.23.44-1.i386.rpm
 
 
symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
 
# vi /etc/profile
   export LD_ASSUME_KERNEL=2.4.1

 

[출처] qreeko님의 블로그 | 큐리 (http://blog.naver.com/qreeko?Redirect=Log&logNo=100013663616)

 

 

-----------------------------------------------

error while loading shared libraries: libmysqlclient.so.10: wrong ELF class: ELFCLASS64

> 이 메세지는 libmysqlclient.so.10 파일은 있는데 64bit 용이여서 사용이 안된다는 뜻.

 

profile 은 사용할 계정마다 설정해주어야 합니다.

반응형

댓글()

zmanda를 사용한 쉬운 MySQL 백업과 복구 (증분백업 가능)

리눅스/MySQL|2015. 1. 16. 11:07
반응형

zmanda를 사용한 MySQL 백업과 복구


1. zmanda는 복잡한 mysql의 옵션을 사용하지 않고 쉽게 mysql을 백업하고, 복구할 수 있는 유틸리티이다. 본 문서에서는 자체 백업만 언급하였다. 원격 백업 혹은 replication에 대해서는 zmanda 사이트의 메뉴얼을 읽어보기 바란다.

적용 가능한 MySQL 버전:

MySQL 4.1.x and MySQL 5.x

Manual:
http://mysqlbackup.zmanda.com/index.php/Zmanda_Recovery_Manager_for_MySQL_Users_Manual 
http://www.zmanda.com/quick-mysql-backup.html 

2. 다운로드, 설치

# lftpget http://www.zmanda.com/downloads/community/ZRM-MySQL/2.1/RPM/MySQL-zrm-2.1-1.noarch.rpm 
# lftpget http://www.zmanda.com/downloads/community/ZRM-MySQL/2.1/RPM/MySQL-zrm-client-2.1-1.noarch.rpm 

아래의 3가지 perl 모듈이 필요하다.

===
*중요 : perl-DBD-MySQL 패키지도 필요하다. 만약 이 패키지가 설치되어 있지 않을 경우, yum 으로 설치하면 mysql 패키지도 의존성으로 인하여 같이 설치하려고 한다. MySQL을 소스로 설치했다면, 자신의 OS 버전에 맞는 패키지를 직접 다운로드 하여 rpm -ivh --nodeps perl-DBD-MySQL-xxx 형식을 사용하여 의존성을 체크하지 않고 설치하도록 한다.
===

[root@localhost ~]# yum install perl-DBI perl-XML-parser
[root@localhost ~]# rpm -ivh MySQL-zrm-*
[root@localhost ~]# rpm -ql MySQL-zrm
/etc/logrotate.d/mysql-zrm
/etc/mysql-zrm
/etc/mysql-zrm/RSS.header
/etc/mysql-zrm/mysql-zrm-release
/etc/mysql-zrm/mysql-zrm-reporter.conf
/etc/mysql-zrm/mysql-zrm.conf
/etc/xinetd.d/mysql-zrm-socket-server
/usr/bin/mysql-zrm
/usr/bin/mysql-zrm-abort-backup
/usr/bin/mysql-zrm-backup
/usr/bin/mysql-zrm-check
/usr/bin/mysql-zrm-extract-backup
/usr/bin/mysql-zrm-getconf
/usr/bin/mysql-zrm-list
/usr/bin/mysql-zrm-manage-backup
/usr/bin/mysql-zrm-migrate-file-ownership
/usr/bin/mysql-zrm-parse-binlogs
/usr/bin/mysql-zrm-purge
/usr/bin/mysql-zrm-reporter
/usr/bin/mysql-zrm-restore
/usr/bin/mysql-zrm-scheduler
/usr/bin/mysql-zrm-verify-backup
/usr/bin/zrm-pre-scheduler
/usr/lib/mysql-zrm/Data/Report.pm
/usr/lib/mysql-zrm/Data/Report/Base.pm
/usr/lib/mysql-zrm/Data/Report/Plugin/Csv.pm
/usr/lib/mysql-zrm/Data/Report/Plugin/Html.pm
/usr/lib/mysql-zrm/Data/Report/Plugin/Text.pm
/usr/lib/mysql-zrm/XML/RSS.pm
/usr/lib/mysql-zrm/ZRM/Common.pm
/usr/lib/mysql-zrm/ZRM/MySQL.pm
/usr/lib/mysql-zrm/ZRM/Replication.pm
/usr/lib/mysql-zrm/ZRM/SnapshotCommon.pm
/usr/share/doc/MySQL-zrm-2.1
/usr/share/doc/MySQL-zrm-2.1/AUTHORS
/usr/share/doc/MySQL-zrm-2.1/COPYING
/usr/share/doc/MySQL-zrm-2.1/INSTALL
/usr/share/doc/MySQL-zrm-2.1/README
/usr/share/doc/MySQL-zrm-2.1/README-plugin-encrypt
/usr/share/doc/MySQL-zrm-2.1/README-plugin-post-backup
/usr/share/doc/MySQL-zrm-2.1/README-plugin-pre-backup
/usr/share/doc/MySQL-zrm-2.1/README-plugin-pre-scheduler
/usr/share/doc/MySQL-zrm-2.1/README-plugin-snapshot-plugin
/usr/share/doc/MySQL-zrm-2.1/README-plugin-socket-copy
/usr/share/doc/MySQL-zrm-2.1/README-plugin-ssh-copy
/usr/share/man/man1/mysql-zrm-abort-backup.1.gz
/usr/share/man/man1/mysql-zrm-backup.1.gz
/usr/share/man/man1/mysql-zrm-check.1.gz
/usr/share/man/man1/mysql-zrm-extract-backup.1.gz
/usr/share/man/man1/mysql-zrm-list.1.gz
/usr/share/man/man1/mysql-zrm-manage-backup.1.gz
/usr/share/man/man1/mysql-zrm-parse-binlogs.1.gz
/usr/share/man/man1/mysql-zrm-purge.1.gz
/usr/share/man/man1/mysql-zrm-reporter.1.gz
/usr/share/man/man1/mysql-zrm-restore.1.gz
/usr/share/man/man1/mysql-zrm-scheduler.1.gz
/usr/share/man/man1/mysql-zrm-verify-backup.1.gz
/usr/share/man/man1/mysql-zrm.1.gz
/usr/share/man/man5/mysql-zrm-reporter.conf.5.gz
/usr/share/man/man5/mysql-zrm.conf.5.gz
/usr/share/mysql-zrm
/usr/share/mysql-zrm/plugins
/usr/share/mysql-zrm/plugins/encrypt.pl
/usr/share/mysql-zrm/plugins/lvm-snapshot.pl
/usr/share/mysql-zrm/plugins/parse-binlogs.pl
/usr/share/mysql-zrm/plugins/post-backup.pl
/usr/share/mysql-zrm/plugins/pre-backup.pl
/usr/share/mysql-zrm/plugins/pre-scheduler-plugin.pl
/usr/share/mysql-zrm/plugins/socket-copy.pl
/usr/share/mysql-zrm/plugins/socket-server.pl
/usr/share/mysql-zrm/plugins/ssh-copy.pl
/usr/share/mysql-zrm/plugins/xinetd.smf
/usr/share/mysql-zrm/plugins/zfs-snapshot.pl
/var/lib/mysql-zrm
/var/log/mysql-zrm
/var/log/mysql-zrm/mysql-zrm.log
[root@localhost ~]#

[root@localhost ~]# rpm -ql MySQL-zrm-client
/etc/xinetd.d/mysql-zrm-socket-server
/usr/lib/mysql-zrm/ZRM/SnapshotCommon.pm
/usr/share/mysql-zrm/plugins/lvm-snapshot.pl
/usr/share/mysql-zrm/plugins/socket-copy.pl
/usr/share/mysql-zrm/plugins/socket-server.pl
/usr/share/mysql-zrm/plugins/ssh-copy.pl
/usr/share/mysql-zrm/plugins/zfs-snapshot.pl
/var/lib/mysql-zrm
/var/log/mysql-zrm
/var/log/mysql-zrm/mysql-zrm.log
[root@localhost ~]#

3. 설정

[3.1] /etc/my.cnf 파일 설정
MySQL의 환경설정 파일(/etc/my.cnf)에서 바이너리 로그를 생성하도록 설정한다.

# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id       = 1

[3.2] /etc/mysql-zrm/mysql-zrm.conf 파일 설정

/etc/mysql-zrm/mysql-zrm.conf 파일에서 MySQL 접속 아이디와 패스워드를 설정한다.

[MySQL server parameters]
user=mysqlbackup
password="mysqlbackup_password"
host="localhost"
port=3306
socket=/tmp/mysql.sock

mysql의 캐릭터셋을 지정한다. 지정하지 않으면 디폴트값으로 ut8로 지정된다.
default-character-set=utf8

mysql 실행파일 경로와 binlog 파일의 경로, 임시파일 경로 설정.
mysql-binpath="/usr/local/server/mysql/bin"
mysql-binlog-path="/usr/local/server/mysql/var"
tmpdir=/tmp

[Backup parameters]
백업 레벨이 0이면 전체 백업, 1이면 증분 백업
# Backup level.
backup-level = 0

백업 모드에는 raw와 logical이 있다. raw는 DB와 동일한 파일을 복사(mysqlhotcopy)하고, logical은 .sql의 파일로 백업한다. (logical로 백업하면 .sql 파일을 생성하므로, OS에 관계없이 복구가 가능하다.)
# Backup method
backup-mode = logical

백업 파일을 저장할 디렉토리 경로를 설정한다.
destination=/backup/mysql

백업 파일을 보유할 기간을 명시한다. D는 일, W는 주, M은 월을 의미한다. 아래와 같이 10D로 설정하면 백업 파일을 10일동안만 보관하고, 10일 이후에는 자동으로 삭제한다.
retention-policy=10D

모든 데이터 베이스를 백업대상으로 한다.
all-databases=1

[ZRM parameters]
백업을 한 다음 백업 리포트를 전송할 메일 지정. 메일을 지정하지 않으면, 디폴트로 발송하지 않는다.
mailto="mymail@domain.com"

=======================================
* MySQL 서버 프로세스를 구동하는 유저는 mysql 이어야 한다. *
=======================================

4. 백업

아래 명령을 사용하면, 백업셋 이름으로 dailyrun을 사용하여 곧바로 모든 DB 테이블을 백업한다. (Full Backup) 백업을 완료하면 /etc/mysql-zrm/dailyrun 디렉토리내에 last_backup 파일을 만든다. 이 파일에는 저장된 백업파일의 경로가 입력되어 있다.
  
mysql-zrm-scheduler --now --backup-set dailyrun --backup-level 0
# cat /etc/mysql-zrm/dailyrun/last_backup
/backup/lug/mysql/dailyrun/20081229135816

백업 파일 검증하기.
mysql-zrm --action verify-backup --backup-set dailyrun
verify-backup:INFO: ZRM for MySQL Community Edition - version 2.1
dailyrun:verify-backup:INFO: Verification successful

백업 상태 로그 보기.
mysql-zrm-reporter --where backup-set=dailyrun --show backup-status-info
REPORT TYPE : backup-status-info

          backup_set  backup_date                  backup_level  backup_status         backup_type       comment
-----------------------------------------------------------------------------------------------------------------------------
            dailyrun  2008년 12월 29일 (월)               0  Backup succeeded      regular           ----
                      오후 01시 58분 16초

백업된 크기와 백업방법, 시간등을 확인한다.
mysql-zrm-reporter --where backup-set=dailyrun --show backup-performance-info
REPORT TYPE : backup-performance-info


          backup_set  backup_date                  backup_level     backup_size  backup_size_compressed     backup_time   backup_type       compress_encrypt_time
----------------------------------------------------------------------------------------------------------------------------------------------------------------
            dailyrun  2008년 12월 29일 (월)               0       124.21 MB  ----                       00:00:35      regular           ----
                      오후 01시 58분 16초

매일 새벽 2시에 백업을 하도록 cron에 설정한다.(Full Backup)
mysql-zrm-scheduler --add --interval daily --backup-set dailyrun --start 02:00

cron에 설정되었는지 확인한다.
mysql-zrm-scheduler --query
schedule:INFO: ZRM for MySQL Community Edition - version 2.1
Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log
0 2 * * * /usr/bin/zrm-pre-scheduler --action backup --backup-set dailyrun --backup-level 0 --interval daily

5. 복구

백업에 사용할 이미지의 정보를 확인한다.
mysql-zrm-reporter --show restore-info --where backup-set=dailyrun
REPORT TYPE : restore-info
          backup_set  backup_date                  backup_level  backup_directory                          backup_status         comment
-----------------------------------------------------------------------------------------------------------------------------------------------------
            dailyrun  2008년 12월 29일 (월)               0  /backup/lug/mysql/dailyrun/2008122913581  Backup succeeded      ----
                      오후 01시 58분 16초                   6

복구옵션(-restore)과 함께 위의 빨간색 백업 디렉토리를 소스 디렉토리로 지정하여 복구한다.
mysql-zrm -restore --backup-set dailyrun --source-directory /backup/lug/mysql/dailyrun/2008122913581

logical 즉 .sql 형식으로 백업해 두면 어떤 시스템(윈도우즈,리눅스,솔라리스등)에서도 mysql 명령어로 복구가 가능하다는 장점이 있다.

[Addition]
zmanda는 perl로 만들어진 오픈소스이다.

[root@localhost ~]# cat /usr/bin/mysql-zrm

#!/usr/bin/perl
#
# Copyright (c) 2006 Zmanda Inc.  All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 as published
# by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
#
# Contact information: Zmanda Inc, 505 N Mathlida Ave, Suite 120
# Sunnyvale, CA 94085, USA, or: http://www.zmanda.com
#

use strict;
use warnings;


our $oldPATH = $ENV{'PATH'};
$ENV{'PATH'} = "/usr/local/bin:/opt/csw/bin:/usr/bin:/usr/sbin:/sbin:/bin:/usr/ucb";


#path where ZRM utilities are installed
my $ZRM_BINPATH="/usr/bin";


my $USAGE="--action <backup|restore|schedule-backup|report|list|getconf|purge|parse-binlogs|check|verify-backup|extract-backup|abort-backup>nHelp on individual action items can be obtained by specifying --help with the required action.nFor example: 'mysql-zrm --action backup --help'";


my @cmd_args;


sub usage()
{
        print STDERR "$_[0]n";
        print STDERR "USAGE:n";
        print STDERR "$USAGEn";
        exit(2);
}


sub getAction()
{
        my $len = @ARGV;
        my $i;
        my $act;
        for( $i = 0; $i < $len; $i++ ){
                if( $ARGV[$i]=~/^--action=/ ){
                        $act = $';
                }elsif( $ARGV[$i]=~/^--action/ ){
                        $i++;
                        if( $i < $len ){
                                $act = $ARGV[$i];
                        }
                }else{
                        my $x = ""$ARGV[$i]"";
                        push @cmd_args, $x;
                }
        }
        if( ! defined $act || $act eq "" ){
                &usage( "ERROR: Please specify --action" );
        }
        $ENV{"ZRM_CMD_NAME"}="$0 --action $act";
        $ENV{"ZRM_LAUNCHER"}=$$;
        return $act;
}


sub main()
{
        my $act = getAction();
        if( !defined $act ){
                &usage( "ERROR: Please specify --action" );
        }
        my $cmd;
        if($act eq "backup") {
                $cmd = "mysql-zrm-backup";
        } elsif($act eq "restore") {
                $cmd = "mysql-zrm-restore";
        } elsif($act eq "list" ) {
                $cmd = "mysql-zrm-list";
        } elsif($act eq "purge" ){
                $cmd = "mysql-zrm-purge";
        } elsif($act eq "parse-binlogs"){
                $cmd = "mysql-zrm-parse-binlogs";
        } elsif($act eq "check"){
                $cmd = "mysql-zrm-check";
        } elsif($act eq "verify-backup"){
                $cmd = "mysql-zrm-verify-backup";
        } elsif($act eq "extract-backup"){
                $cmd = "mysql-zrm-extract-backup";
        } elsif($act eq "abort-backup"){
                $cmd = "mysql-zrm-abort-backup";
        } elsif($act eq "schedule-backup"){
                $cmd = "mysql-zrm-scheduler";
        } elsif($act eq "report"){
                $cmd = "mysql-zrm-reporter";
        } elsif($act eq "getconf"){
                $cmd = "mysql-zrm-getconf";
        } elsif($act eq "manage-backup"){
                $cmd = "mysql-zrm-manage-backup";
        }else{
                &usage("ERROR: Unknown Action '$act'");
        }
        my $r = system( "$ZRM_BINPATH/$cmd @cmd_args" );
        exit( $r>>8 );
}
&main();

[root@localhost ~]#


혹시라도 잘못된 사항이나, 추가적인 내용이 있으면 코멘트 남겨주세요.

망극!

- 끝 -


반응형

댓글()

[그누보드] mysql 4.0 이하에서 4.1 이상으로 서버이전후 로그인 안될때

리눅스/MySQL|2015. 1. 16. 11:06
반응형

제로보드와 GNU보드 둘다 회원들의 password를 관리할때 
MySQL의 password()를 사용하는데 이 함수가 4.0이하와 4.1이상에서 
다른 hashing value를 가집니다. 다 아시겠지만 4.0이하는 16바이트, 
4.1이상은 40바이트의 hashed value를 가집니다. 

패스워드가 모두 옛날 password()함수로 되어있습니다. 
최근에 호스트쪽에서 MySQL 4.1.X로 업그레이드를 해서 지금 설치된 그누보드는 password()를 쓸때에 모두 16바이트 대신 40바이트의 hashed value를 돌려주게 됩니다. 

즉, 회원정보를 옮겨오면 로그인이 안되는것이죠. 

다음과 같이하면 됩니다. 


1. 그누보드 / lib / common.lib.php 의 1096번째 줄에 
function sql_password($value) 를 검색해서 아래와 같이 함수를 추가합니다. 

function sql_old_password($value) 

    $row = sql_fetch(" select old_password('$value') as pass "); 
    return $row[pass]; 


function sql_password($value) 

    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes 
    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes 
    $row = sql_fetch(" select password('$value') as pass "); 
    return $row[pass]; 




2. 그누보드 / bbs / login_check.php의 25번째줄의 
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\n\n패스워드는 대소문자를 구분합니다.");
}
를 아래와 같이 수정

if (!$mb[mb_id]) { 
  alert("가입된 회원이 아니거나 패스워드가 틀립니다.\n\n패스워드는 대소문자를 구분합니다."); 
  } else { //id가 있는경우 
    if ( (sql_password($mb_password) != $mb[mb_password]) && (sql_old_password($mb_password) != $mb[mb_password]) ) { 
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\n\n패스워드는 대소문자를 구분합니다."); 
  } 


로 바꾸어 줍니다. 더 간단하게도 쓸수 있지만 논리 에러를 내지 않으려고 일부러 길게 썼습니다. 



3. 그누보드 / bbs / register_form.php의 73번째 줄을 

// 원본 
    if (!($member[mb_password] == sql_password($_POST[mb_password]) && $_POST[mb_password])) 
        alert("패스워드가 틀립니다."); 
// 수정 
if (!($member[mb_password] == sql_password($_POST[mb_password]) && $_POST[mb_password]) && !($member[mb_password] == sql_old_password($_POST[mb_password]) && $_POST[mb_password])) 
        alert("패스워드가 틀립니다."); 


로 바꾸어 줍니다. 회원 정보 수정시에 한번더 비밀번호를 체크하기에 여기도 넣어주어야 합니다. 
이렇게 해주면 나중에 회원이 비밀번호를 바꾸었을경우에도 제대로 로그인이 됩니다. 

그리고 회원들이 모두 비밀번호를 40바이트짜리로 바꾸었을경우에는 위에 바꾼것을 원래대로 돌려 놓는것이 좋습니다. 


참고자료
에밀 ( http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=1212 )

 

 

[출처] 해피정닷컴 | 해피정닷컴 (http://www.happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&wr_id=320&sca=%EA%B7%B8%EB%88%84%EB%B3%B4%EB%93%9C&page=3)

반응형

댓글()

[제로보드4] mysql 4.0 이하에서 4.1 이상으로 서버이전후 로그인 안될때

리눅스/MySQL|2015. 1. 16. 11:06
반응형

login_check.php 파일 수정...

원본소스를...
// 회원 로그인 체크
      $result = mysql_query("select * from $member_table where user_id='$user_id' and password=password('$password')") or error(mysql_error());
      $member_data = mysql_fetch_array($result);


다음과 같이 수정...
// 회원 로그인 체크
      $p_result = mysql_query("select length(password) from $member_table where user_id='$user_id'") or error("password error<br>".mysql_error());
      $p_data = mysql_fetch_row($p_result);
      if($p_data[0] == 41)
              $result = mysql_query("select * from $member_table where user_id='$user_id' and password=password('$password')") or error(mysql_error());
      else {
              $m_result = mysql_query("select * from $member_table where user_id='$user_id' and password=old_password('$password')") or error(mysql_error());
              $m_data = mysql_fetch_array($m_result);
              if($m_data[no]) {
                      @mysql_query("update $member_table set password=password('$password') where no='$m_data[no]'") or error("new password update error<br>".mysql_error());
                      $result = mysql_query("select * from $member_table where user_id='$user_id' and password=password('$password')") or error(mysql_error());
              }
              else Error("로그인을 실패하였습니다");
      }
      $member_data = mysql_fetch_array($result);


위와같이 작업하기 전에 zetyx_member_table의 password 컬럼길이를 20에서 41로 조정

 

 

[출처] g3communication | jjjang (http://www.g3.cc/board/view.php?id=comm04_1&no=593)

반응형

댓글()

mysql-table-sync를 이용한 MySQL 데이터 동기화

리눅스/MySQL|2015. 1. 16. 11:05
반응형

#  MySQL Toolkit, http://mysqltoolkit.sourceforge.net/
# mysql-table-sync, http://www.xaprb.com/blog/2007/03/18/introducing-mysql-table-sync/

# 설치 전 요구사항
- Linux, WIndows
- perl
- perl DBI, DBD 모듈

# 설치

shell> tar zxvf mysql-table-sync-0.9.2.tar.gz 
shell> cd mysql-table-sync-0.9.2 
 
shell> perl Makefile.PL 
shell> make install 
 

# 설치 후 작업
- 소스 데이터 연결을 위한 환경설정

MySQL 서버가 설치된 서버에서, 
 
shell> ln -s my.cnf .my.cnf 
 

# 옵션

$ mysql-table-sync --help 
Usage: /usr/bin/mysql-table-sync [OPTION].. <source> <dest> 
 
  --algorithm     -a   Algorithm to use (topdown, bottomup) 
  --[no]analyze   -A   Analyze (find/fix/print) in bottom-up algorithm (default) 
  --branchfactor  -B   Branch factor for bottom-up algorithm (default 128) 
  --bufferresults      Fetch all rows from MySQL before comparing 
  --[no]build     -U   Build tables for bottom-up algorithm (default) 
  --[no]cleanup   -C   Clean up scratch tables for bottom-up algorithm (default) 
  --[no]collate   -O   Use MySQL to compare strings if necessary (default) 
  --columns       -c   Comma-separated column list 
  --debug         -b   Print debugging output to STDOUT 
  --deleteinsert  -l   Convert all UPDATES to DELETE and INSERT 
  --drilldown     -d   Drilldown groupings for top-down algorithm 
  --engine        -E   Storage engine for bottom-up tables 
  --execute       -x   Execute queries required to sync 
  --forupdate     -f   Use SELECT FOR UPDATE or LOCK IN SHARE MODE for checksums 
  --help               Show this help message 
  --[no]lock      -k   Lock tables when beginning work 
  --maxcost       -m   Maximum rowcount before aborting 
  --onlydo        -o   Only do INS/UPD/DEL (default: all) 
  --prefix        -P   Tablename prefix for bottom-up algorithm 
  --print         -p   Print all sync queries to STDOUT 
  --queries       -q   Make debugging output executable SQL 
  --replicate     -r   Change on master. Implies --strategy=r 
  --separator     -e   Separator for CONCAT_WS 
  --singletxn     -1   Do in a single transaction 
  --size          -S   Table size in bottom-up algorithm, not usually needed 
  --strategy      -s   Query strategy when syncing (r=replace, s=ins/upd/del) 
  --temp          -T   Use temporary tables in bottom-up algorithm (default: no) 
  --timeoutok     -t   Keep going if --wait fails 
  --verbose       -v   Explain differences found; specify up to three times 
  --[no]verify    -V   Verify checksum compatibility across servers (default) 
  --wait          -w   Make slave wait for master pos (implies --lock) 
 
/usr/bin/mysql-table-sync finds and resolves data differences between two MySQL tables. 
<source> and <dest> are data sources in the format 
   user:pass@host:port/database.table:key 
Everything but the table name is optional, and defaults will be read from your 
environment and your .my.cnf file if possible.  Values for <dest> default to the 
values for <source>. 
 
For more details, please read the documentation: 
 
   perldoc /usr/bin/mysql-table-sync 
 

# 소스 테이블과 대상 테이블간 부분 검색 (실제 동기화 작업은 일어나지 않고, 동기화를 위한 스크립트만 출력해준다.)

$ mysql-table-sync --print ptop:ptoppw@10.30.40.131:3306/ptop.my_box ptop:ptoppw@10.30.40.132:3306/ptop.my_box 
UPDATE `ptop`.`my_box` SET `session_id`='60331',`page_id`='5981',`title`='My 利앷텒',`box_list_id`='42',`pos_col`='0',`pos_row`='-63.5625',`param1`=NULL,`param2`=NULL,`param3`=NULL,`param4`=NULL,`param5`=NULL,`param_text`=NULL WHERE `id` = '434072'; 
UPDATE `ptop`.`my_box` SET `session_id`='60331',`page_id`='5981',`title`='怨꾩궛湲?,`box_list_id`='1121',`pos_col`='0',`pos_row`='-67.5625',`param1`='http://wm.daum.net/widget/flash/Calculator.swf',`param2`=NULL,`param3`='185',`param4`='290',`param5`=NULL,`param_text`=NULL WHERE `id` = '434082'; 
INSERT INTO `ptop`.`my_box`(`id`,`session_id`,`page_id`,`title`,`box_list_id`,`pos_col`,`pos_row`,`param1`,`param2`,`param3`,`param4`,`param5`,`param_text`) VALUES('423482','60331','5981','My 利앷텒','42','1','-6.87408447265625',NULL,NULL,NULL,NULL,NULL,NULL); 
INSERT INTO `ptop`.`my_box`(`id`,`session_id`,`page_id`,`title`,`box_list_id`,`pos_col`,`pos_row`,`param1`,`param2`,`param3`,`param4`,`param5`,`param_text`) VALUES('427971','60331','5981','Alice in Wonderland','5','1','-12.8740844726561','http://in-wonderland.tistory.com/rss','summary','10','','',NULL); 
INSERT INTO `ptop`.`my_box`(`id`,`session_id`,`page_id`,`title`,`box_list_id`,`pos_col`,`pos_row`,`param1`,`param2`,`param3`,`param4`,`param5`,`param_text`) VALUES('434081','60331','5981','BBC News | News Front Page | World Edition ','521','0','-59.5625','http://news.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml',NULL,NULL,NULL,NULL,NULL); 
[mysql@spf-per-db01 ~]$ 
 

# 소스 테이블 기준으로 대상 테이블과 싱크 맞추기 (동기화를 위한 스크립트 실행한다. 단, 단일 트랜잭션으로 처리한다.)

$ mysql-table-sync --print --execute --singletxn ptop:ptoppw@10.30.40.131:3306/ptop.my_box ptop:ptoppw@10.30.40.132:3306/ptop.my_box

 

 

[출처] Mixellaneous | 김영우 (http://mixellaneous.tistory.com/94)

반응형

댓글()

select 결과를 파일로 저장하기

리눅스/MySQL|2015. 1. 16. 11:05
반응형

두가지 방법이 있습니다.

 

1. 첫번째

# mysql -uroot -p sysdocu -e "select * from member" -t > member.txt

 

sysdocu : DB명

member : 테이블명

member.txt : 결과를 저장할 파일명

 

 

2. 두번째

우선 mysql 에 로그인 후

 

mysql> use sysdocu

mysql> select * into outfile '/home/sysdocu/member.txt' from member;

 

sysdocu : DB명

/home/sysdocu/member.txt : 결과를 저장할 경로 및 파일명 (경로가 없고 파일명만 쓸경우 mysql 로그인했던 위치에 생성 됨)

member : 테이블명

반응형

댓글()

latin1 DB data를 euckr DB 로 넣기 (iconv 이용)

리눅스/MySQL|2015. 1. 16. 11:05
반응형

latin1 DB를 dump 받아서 그대로 euckr DB에 넣으면 캐릭터셋이 다르므로 한글이 깨지게 됩니다.

아래와 같은 절차를 통해 한글이 깨지지 않게 이전을 할 수 있습니다.

(여기에서는 euckr DB인데 테이블을 latin1로 생성해서 쓰고있을 경우를 설명)

 

우선 latin1 DB를 사용하는곳에서 dump를 받습니다.

 

mysqldump -uroot -p sysdocu > sysdocu.sql

 

latin1 에서 dump 받을 경우 utf8 로 저장되기 때문에 아래와 같이 iconv 로 캐릭터셋 변환 작업을 해주어야 합니다.

 

iconv -c -f utf8 -t latin1 sysdocu.sql > sysdocu_euckr.sql

 

변경 후 neulwon_euckr.sql 을 vi 로 열어보면 테이블 생성을 latin1으로 하므로

vi 편집기를 이용하여 euckr로 변경해줍니다. (utf8 문자도 euckr로 변경)

 

vi sysdocu_euckr.sql

 

:%s/latin1/euckr/g        <-- latin1를 euckr로 일괄 변경

:%s/utf8/euckr/g          <-- utf8을 euckr로 일괄 변경

  

수정된 파일을 저장을 하여 DB를 이전할 서버로 보냅니다.

그리고 이전할 서버에서 neulwon 이라는 DB 생성 후 데이타를 import 합니다. 

 

mysql -uroot -p sysdocu < sysdocu_euckr.sql

 

mysql 로그인하여 select 해보면 한글이 정상적으로 보이는 것을 확인할 수 있습니다.

반응형

댓글()

mysql 바이너리 파일로 DB 복구

리눅스/MySQL|2015. 1. 16. 11:04
반응형

DB작업전 반드시 data를 백업 후 작업을 진행하도록 합니다.

# cp -arp /usr/local/mysql/data /usr/local/mysql/data_bak_100406

 

mysql data 폴더를 보면

 

mysql-bin.000001

mysql-bin.000002

mysql-bin.000003

mysql-bin.000004, ...... 등의 파일이 있습니다.

 

mysql 을 설치하고 부터 실행하는 모든 명령어들(create, update, delete, alter 등) 이 기록에 남는데

- 웹사이트에서 게시글 등록 등의 작업도 로그에 남습니다. -

이러한 기록을 이용하여 현재까지의 DB를 만들 수가 있습니다.

물론 문제발생 시간을 확인하여 그 전 시간까지만 복구를 해야합니다.

 

1. mysql 바이너리 로그 파일 확보 

mkdir /usr/local/src/mysql_bin_repair

cp -arp /usr/local/mysql/data/mysql-bin.0* /usr/local/src/mysql_bin_repair

cd /usr/local/src/mysql_bin_repair

 

2. mysql 쿼리문 추출

이제 바이너리 로그파일을 mysql 에 입력 가능한 쿼리문으로 변경해야 합니다.

 

/usr/local/mysql/bin/mysqlbinlog -d sysdocu -s mysql-bin.000001 > mysql-bin.000001.sql

/usr/local/mysql/bin/mysqlbinlog -d sysdocu -s mysql-bin.000002 > mysql-bin.000002.sql

/usr/local/mysql/bin/mysqlbinlog -d sysdocu -s mysql-bin.000003 > mysql-bin.000003.sql

/usr/local/mysql/bin/mysqlbinlog -d sysdocu -s mysql-bin.000004 > mysql-bin.000004.sql

 

[옵션 설명]

-d DB명 : 바이너리 로그파일에서 해당 DB에 관한 쿼리만 추출합니다. 예) sysdocu 이라는 DB 복구

-s : 주석처리된 내용은 추출대상에서 제외합니다.

 

3. DB 삭제 및 복구

위와같이 문제발생 시간 전까지의 모든 바이너리 로그를 새로운 파일로 생성을 합니다.

생성된 *.sql 파일을 vi 로 열어보면 create database 에서부터 지금까지의 쿼리문이 기록이 되어있습니다. 

이제 이 쿼리문을 이용하여 DB를 복구할 수 있습니다.

 

mysql -p

Enter password: (mysql root 패스워드 입력)

기존에 복구하고자 하는 DB가 있을 경우 복구가 되지 않으니 해당 DB를 삭제합니다.

 

mysql> drop database sysdocu;

 

이제 아래와 같이 쿼리추출파일을 실행하여 data를 생성합니다.

 

mysql> . mysql-bin.000001.sql

mysql> . mysql-bin.000002.sql

mysql> . mysql-bin.000003.sql

mysql> . mysql-bin.000004.sql

 

복구가 완료되었습니다. select 명령어를 이용하여 해당 DB에 데이타가 정상 입력되었는지 확인해봅니다.

반응형

댓글()

테이블내 특정 문자 치환 방법 (SQL Injection 공격 복구)

리눅스/MySQL|2015. 1. 16. 11:04
반응형

mysql> update sysdocu set subject=REPLACE(subject,"<script language=javascript src="http://192.168.10.2/ajax.js></script>","");

 

sysdocu : 테이블명

subject : 필드명

첫번째 "" : 변경 대상 내용

두번째 "" : 대체할 내용


MSSQL 의 경우


UPDATE 테이블명 SET 컬럼=replace(cast(컬럼 as varchar(8000)),substring(cast(컬럼 as varchar(8000)),charIndex('</title>',컬럼),len(cast(컬럼 as varchar(8000)))),'') WHERE charIndex('</title>',컬럼) > 0


</title> 를 포함해서 뒤로 삭제

반응형

댓글()

예약어로 인해 복구가 되지 않을경우

리눅스/MySQL|2015. 1. 16. 11:03
반응형

group 이 MySQL에서 예약된 단어라서 그렇습니다.

예약어 들을 명명하여 사용하는것은 권장되지 않습니다.

다른이름으로 바꾸는것을 권해드리고요...

 

바꿀수 없다면 그레이브(`) 로 감싸서 하시면 되겟습니다.

 

`group` varchar(200) default Null,

 

 

[발췌] 지식인 | jpriest (http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=71119254&qb=bXlzcWwgNSDsmIjslb3slrQg7JeQ65+s&enc=utf8&section=kin&rank=1&sort=0&spq=0&pid=f2X%2BXg331xossaFIdcRssv--122568&sid=S2u9bn20a0sAADbkLzY)

반응형

댓글()

[error] checking "LinuxThreads"... "Not found"

리눅스/MySQL|2015. 1. 16. 11:03
반응형

mysql 4.0.27 설치시 에러 발생

 

checking "LinuxThreads"... "Not found"
configure: error: This is a linux system and Linuxthreads was not
found. On linux Linuxthreads should be used.  Please install Linuxthreads
(or a new glibc) and try again.  See the Installation chapter in the

# echo '/* Linuxthreads */' >> /usr/include/pthread.h

[출처] http://onlybible.tistory.com/917


반응형

댓글()