インストール

# yum -y install mysql-server

初期設定

/etc/my.cnf に追加

[mysqld]
default-character-set = utf8
skip-character-set-client-handshake

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

[client]
default-character-set = utf8

[odbc]
default-character-set = utf8

MySQL起動

# service mysqld start

mysqld自動起動設定

# chkconfig mysqld on
# chkconfig --list mysqld

セキュリティ初期設定

# mysql_secure_installation

rootとしてログイン

# mysql -u root -p

現在登録されているユーザ、ホスト、パスワード確認

すべてを展開すべてを収束
  1
  2
  3
  4
  5
  6
 
 
 
 
 
 
SELECT 
    CONVERT(user USING utf8) AS user, 
    CONVERT(host USING utf8) AS host, 
    password 
FROM 
    mysql.user;

rootパスワード登録

すべてを展開すべてを収束
  1
  2
 
 
set password for root@localhost=password('rootパスワード');
set password for root@'自分のホスト名'=password('rootパスワード');

一旦ログアウトし、ログインし直してみてパスワードを確認

mysql> exit
# mysql -u root -p

匿名ユーザ削除

すべてを展開すべてを収束
  1
 
delete from mysql.user where user='';

既存データベース一覧表示

すべてを展開すべてを収束
  1
 
show databases;

testデータベース削除

すべてを展開すべてを収束
  1
 
drop database test;

文字コード設定確認

mysql> status

または

mysql> show variables like 'char%';

新規データベースおよびユーザの追加

データベース仕様

データベース
testdb
ユーザ
testuser
パスワード
testpass

rootとしてログイン

# mysql -u root -p

TakeAsh.netドメイン内全体からのアクセスを許可する場合

すべてを展開すべてを収束
  1
 
grant all privileges on testdb.* to testuser@'%.TakeAsh.net' identified by 'testpass';

192.168.0.xからのアクセスを許可する場合

すべてを展開すべてを収束
  1
 
grant all privileges on testdb.* to testuser@'192.168.0.%' identified by 'testpass';

一旦ログアウトし、testuserでログインしてテスト

mysql> exit
# mysql -u testuser -p

既存データベース一覧表示

すべてを展開すべてを収束
  1
 
show databases;

新規データベース作成

すべてを展開すべてを収束
  1
 
create database testdb;

testdbに接続

すべてを展開すべてを収束
  1
 
use testdb

既存テーブル表示

すべてを展開すべてを収束
  1
 
show tables;

testtbl作成

すべてを展開すべてを収束
  1
 
create table testtbl(num int, name varchar(50));

レコード登録

すべてを展開すべてを収束
  1
  2
 
 
insert into testtbl values(1,'山田太郎');
insert into testtbl values(2,'岳');

レコード表示

すべてを展開すべてを収束
  1
 
select * from testtbl;

レコード更新

すべてを展開すべてを収束
  1
 
update testtbl set name='山田次郎' where num=1;

レコード削除

すべてを展開すべてを収束
  1
 
delete from testtbl where num=1;

テーブル削除

すべてを展開すべてを収束
  1
 
drop table testtbl;

root パスワードのリセット

  • 空のパスワードを設定することで、パスワード無しでログインできるようになる。
    作業終了後はパスワードを再設定すること。
    > SET PASSWORD FOR 'root'@'localhost' = PASSWORD('');

タイムゾーン確認/設定

  • /etc/my.cnf で設定する場合
    default-time-zone='+09:00'
  • 対話的に設定
    すべてを展開すべてを収束
      1
      2
    
     
     
    
    SET time_zone = '+09:00';
    SET time_zone = 'SYSTEM';
  • 確認
    すべてを展開すべてを収束
      1
    
     
    
    SELECT @@global.time_zone, @@session.time_zone;
  • 現在時刻の表示
    すべてを展開すべてを収束
      1
    
     
    
    SELECT CURDATE(), CURTIME(), NOW();

ファイヤウォール設定

外部からmysqlへのアクセスを許可する

3306:tcp

バックアップ

mysqldump コマンド

  • mysqldump コマンド
    データベース/テーブルの内容を SQL スクリプトとして書き出す。
    $ mysqldump -u ユーザ名 -p データベース名 [テーブル名] -r バックアップファイル名.sql
  • 主なオプション
    • --all-databases, -A
      すべてのデータベース内のすべてのテーブルをダンプする。
    • --force, -f
      テーブルダンプの最中にSQLエラーが発生しても続行する。

リストア

  • 文字コードを指定してリストア
    $ mysql -u ユーザ名 -p --default-character-set=utf8 データベース名
    mysql> SET names 'utf8';
    mysql> SOURCE バックアップファイル名.sql;

テーブルを個別にバックアップ

  • 特定のデータベースについて、テーブル毎に個別にバックアップを行うスクリプト
    filedump.zip
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
    
    #!/bin/bash
    UserName=testuser
    DataBase=testdb
    WorkFile=tables.txt
     
    echo enter database password:
    read PASSWORD
     
    mysql -u $UserName --password=$PASSWORD --database $DataBase -e "show tables;" > $WorkFile
     
    exec 3< $WorkFile
     
    # drop header line
    read LINE 0<&3
     
    while read LINE 0<&3
    do
    echo ${LINE}
    mysqldump -u $UserName --password=$PASSWORD --force $DataBase ${LINE} > Tables/${LINE}.sql
    done
     
    exec 3<&-

ダンプをテーブル毎に分割

  • GitHub:TakeAsh/p-mysqlUtil
  • filesplitSqlDump.zip
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    |
    |
    |
    !
     
     
     
     
     
     
     
     
     
    -
    -
    |
    -
    |
    -
    |
    |
    |
    !
    !
     
     
     
     
    -
    |
    -
    |
    !
    -
    |
    |
    |
    !
    -
    |
    !
    |
    |
    |
    |
    |
    |
    !
     
     
    
    #!/usr/bin/perl
    # split MySQL dump into each tables.
     
    use strict;
    use warnings;
    use utf8;
    use Encode;
     
    my $charsetConsole = 'CP932';
    my $charsetFile    = 'UTF-8';
     
    binmode( STDIN,  ":encoding($charsetConsole)" );
    binmode( STDOUT, ":encoding($charsetConsole)" );
    binmode( STDERR, ":encoding($charsetConsole)" );
     
    @ARGV = map { decode( $charsetConsole, $_ ); } @ARGV;
     
    my $infile         = $ARGV[0] or die("usage: splitSqlDump.pl <dump.sql>\n");
    my $dirSqls        = './sqls/';
    my $structuresfile = $dirSqls . '_structures.sql';
     
    mkdir($dirSqls);
    unlink <"${dirSqls}*">;
     
    my $regSkip = qr{^\s*(
        LOCK\sTABLES\s`[^`]+`\sWRITE|
        /\*!40000\sALTER\sTABLE\s`[^`]+`\sDISABLE\sKEYS\s\*/|
        /\*!40000\sALTER\sTABLE\s`[^`]+`\sENABLE\sKEYS\s\*/|
        UNLOCK\sTABLES
    );}x;
    my $regInsert = qr{^\s*INSERT\sINTO\s`(?<table>[^`]+)`\sVALUES\s\([\s\S]+\);};
    my $regBreak  = qr{(VALUES\s|\),)(\()};
     
    open( my $fhIn, "<:raw", encode( $charsetConsole, $infile ) )
        or die("$infile: $!");
    open( my $fhStructures, ">:raw", encode( $charsetConsole, $structuresfile ) )
        or die("$structuresfile: $!");
    my $prevTable = '';
    my $fhTable   = undef;
    while ( defined( my $line = <$fhIn> ) ) {
        if ( $line =~ $regSkip ) {
            next;
        } elsif ( $line !~ $regInsert ) {
            print $fhStructures $line;
        } else {
            renewTable($1);
            $line =~ s/$regBreak/$1\n\t$2/g;
            print $fhTable $line;
        }
    }
    close($fhIn);
    close($fhStructures);
    renewTable('');
     
    sub renewTable {
        my $newTable = shift;
        if ( $prevTable eq $newTable ) {
            return;
        }
        if ($fhTable) {
            print $fhTable "/*!40000 ALTER TABLE `${prevTable}` ENABLE KEYS */;\n";
            print $fhTable "UNLOCK TABLES;\n";
            close($fhTable);
        }
        if ( !$newTable ) {
            return;
        }
        my $tableFile = $dirSqls . $newTable . '.sql';
        open( $fhTable, ">:raw", encode( $charsetConsole, $tableFile ) )
            or die("$tableFile: $!");
        print $fhTable "LOCK TABLES `${newTable}` WRITE;\n";
        print $fhTable "/*!40000 ALTER TABLE `${newTable}` DISABLE KEYS */;\n";
        $prevTable = $newTable;
    }
     
    # EOF
    

テーブルの修復

テーブルの最適化

Windowsからのアクセス

注意) MySQL 5.0.37 / ODBC Driver 3.51.12 / Windows の構成では文字化けする。

ODBCドライバの登録

  1. Connector/ODBCWindows MSI版をダウンロード
  2. インストール (構成は「Typical」でOK)
  3. 「設定 - コントロールパネル - 管理ツール - データソース(ODBC)」を起動
  4. 「ユーザーDSN」または「システムDSN」を選択
    • 特定のユーザーのみが使用する場合は、「ユーザーDSN」を選択
    • 全ユーザーが使用する場合は、「システムDSN」を選択
  5. 「追加」をクリック
  6. MySQL ODBC x.xx Driver」を選択(x.xxはバージョンナンバー)
  7. 「完了」をクリック
  8. 「Login」タブを記入
    1. 「Data Source Name」は任意の名前でOK
      例) MySQL ODBC Connector
    2. 「Description」は任意。空白も可
    3. 「Server」にサーバ名またはIPアドレスを記入。
      例) mysql1.TakeAsh.net
    4. 「User」にユーザ名を記入
      例) testuser
    5. 「Password」にパスワードを記入
      例) testpass
    6. 「Test」をクリック
      サーバ側の設定が正常にできていれば「Success; connection was made!」と表示される。
      エラーダイアログが出た場合は「Diagnostics」をクリックするとエラーメッセージの詳細が出る。
    7. 「Database」を選択
  9. 「Advanced」タブを選択しoptionを設定する
    Connector/ODBC Connection Parameters
    • Microsoft Access、Visual Basic 用推奨設定
      • Don't Optimized Column Width にチェックを入れる
      • Return Matching Rows にチェックを入れる
    • Read Options From my.cnf にチェックを入れる
  10. 「OK」をクリック

Common SQL Environment (CSE)

  • インストール

    1. CSE のダウンロード
      つみきウェブ

    2. 圧縮ファイルを展開し、適当なフォルダに配置する
      例) C:\Program Files\CSE

    3. CSEを実行する
    4. メニューの「ツール - 設定」を選択
    5. 「機能」タブで「SQLエクスプローラ」の「ルートフォルダ」を指定する
      例) C:\Program Files\CSE\SQL
  • データベースへの接続

    1. メニューの「データベース - 接続」を選択
    2. 「DBMS」は「ODBC汎用」を選択
    3. 「データソース」はODBCドライバとして登録したものを選択
      例) MySQL ODBC Connector
    4. 「ユーザ名」にユーザ名を記入
      例) testuser
    5. 「パスワード」にパスワードを記入
      例) testpass
    6. 「OK」をクリック
  • テーブルの全内容を表示

    1. 「DBエクスプローラ」で、「テーブル」を展開
    2. 内容を表示したいテーブルの上で右クリックし「全データを開く」を選択
    3. 「コンソール」に該当テーブルの内容が表示される
  • テーブルの更新

    1. 「コンソール」に表示されたテーブルの該当箇所を更新する
    2. メニューの「データベース - 編集の反映」を選択
    3. 確認ダイアログの「OK」をクリック
  • テーブルのエクスポート

    1. 該当テーブルの上で右クリックし「全データをエクスポート」を選択
    2. フォルダとファイル名を指定し「保存」をクリック
    3. CSVファイルが書き出される (Shift_JIS)
  • データのインポート

    1. インポートしたいテーブルの上で右クリックし「データをインポート」を選択
    2. CSVファイルを指定し「開く」をクリック
  • SQLの実行

    1. 「新規作成」でスクリプトウィンドウを開く
    2. SQLを記述する
    3. メニューの「データベース - 実行」を選択

ODBC/ConnectionString による接続

DRIVER={MySQL ODBC x.xx Driver}; SERVER=サーバ名; DATABASE=データベース名; UID=ユーザ名; PASSWORD=パスワード; OPTION=オプション

例) DRIVER={MySQL ODBC x.xx Driver}; SERVER=mysql1.TakeAsh.net; DATABASE=testdb; UID=testuser; PASSWORD=testpass; OPTION=65539

A5:SQL Mk-2

  • 後で試す。

添付ファイル: filesplitSqlDump.zip 75件 [詳細] filedump.zip 482件 [詳細]

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Tue, 31 Jan 2017 10:28:27 JST (85d)