MySQLのインストール Ver.5.7.16


 ユーザー作成
# groupadd mysql
# useradd -g mysql mysql


 モージュールの確認
rpm 確認
# rpm -qa | grep ncurses

rpm 削除
rpm -e ncurses

yum 確認
yum list installed | grep ncurses

yum 削除
yum -y remove ncurses


 必要に応じて
# yum install cmake
# yum install gcc
# yum install gcc-c++
# yum install perl
# yum install ncurses-devel


 ソースからの場合
# wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz
# tar zxvf ncurses-6.0.tar.gz
# cd ncurses-6.0
# ./configure --prefix=/usr --with-shared --without-debug
# make
# make install
ncuses ncurses-6.0.tar.gz :2015.08.08 現在 最新バージョン


 インストール
# cd /tmp
# tar zxvf mysql-5.6.23.tar.gz
# cd mysql-5.6.23
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_DEBUG=1
# make
# make install


 データベース初期化 (初期インストール時のみ)
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --ldata=/usr/local/mysql/data/


 所有者等変更
# chown -R mysql:mysql /usr/local/mysql
# chown -R mysql:mysql /usr/local/mysql/data


 設定ファイル
# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf


 起動
# /usr/local/mysql/bin/mysqld_safe --user=mysql &

データディレクトリを指定して起動
# /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data/ --user=mysql &


 確認
# /usr/local/mysql/bin/mysqlshow
テーブル名が表示される

もしくは

# /usr/local/mysql/bin/mysql
mysql>

となればOK


 root 初期パスワード設定
# /usr/local/mysql/bin/mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('password');
Query OK, 0 rows affected (0.00 sec)


my-small.cnf 64Mバイト以下のメモリの小規模サーバー向け
my-medium.cnf 32M〜64Mバイトのメモリを持つMySQL専用サーバーか,128Mバイトのメモリを持つサーバー向け
my-large.cnf 512Mバイト程度のメモリを持ち,MySQL専用となる機械向け
my-huge.cnf 1G〜2Gバイトのメモリを持つMySQL専用サーバー向け
my-innodb-heavy-4G.cnf 4Gバイトのメモリ、InnoDBのみ、ACID、少ない接続、大量のクエリ


 root password 忘れによる変更
# killall mysqld

# /usr/local/mysql/bin/mysqld_safe --user=root --skip-grant-tables &
# /usr/local/mysql/bin/mysql -u root mysql

mysql> update user set Password=null where Host='localhost' and User='root';

# killall mysqld

# /usr/local/mysql/bin/mysqld_safe --user=mysql &

起動できない場合は、権限を確認する。
参考URL
kishi-r.com MySQLインストールでエラー
UNIXしま専科 MySQLインストール


 TCP/IP 接続
外部接続用ユーザー作成
# /usr/local/mysql/bin/mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;


設定ファイル編集
# vi /etc/my.cnf

[mysqld]
+skip-name-resolve
+#skip-networking


接続テスト
# /usr/local/mysql/bin/mysql -h hostname or ip -u username -p


 コマンドエラー
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

このエラーはパスワードが設定されているユーザーを使用して MySQL サーバに接続する際に、パスワードを送信しなかった場合にこのエラーが表示されます。

# /usr/local/mysql/bin/mysql -p

パスワードを送信するオプション「-p」をつけると MySQL サーバに接続できるようになります。
参考URL
MySQL でいこう! ERROR 1045 (28000)


 エクスポート
# /usr/local/mysql/bin/mysqldump db_name > dump.sql


 テキストファイルからSQL実行
# /usr/local/mysql/bin/mysql -u root -p --default-character-set=utf8 db_name < dump.sql
文字コードを指定する場合。
テキストファイルの文字コードをDBの文字コードに合わせないと文字化ける。


 全件数取得
SELECT SQL_CALC_FOUND_ROWS * FROM テーブル LIMIT 0,10;

SELECT FOUND_ROWS();
参考URL
システム構築に関する覚書 MySQL Limit制限をつけない場合の検索該当件数取得


 自動バックアップ
# vi /usr/etc/backup_db.sh

#!/bin/bash

datetime=`date +%Y%m%d_%H:%M:%S`
# DB全体
/usr/local/mysql/bin/mysqldump --user=root --password=pass --default-character-set=utf8 --single-transaction --complete-insert --skip-extended-insert --all-databases > /home/backup/${datetime}.sql

# DB単体
/usr/local/mysql/bin/mysqldump --user=hoge --password=pass --default-character-set=utf8 --single-transaction --complete-insert --skip-extended-insert --databases dbname > /home/backup/${datetime}.sql

chmod 777 /home/backup/${datetime}.sql


# chmod 777 /usr/etc/backup_db.sh

 cronに登録
# crontab -e

1 1,7,13,19 * * * /usr/etc/backup_db.sh
1:01,07:01,13:01,19:01に実行される

 コマンド ユーザー作成
CREATE USER 'dbname'@'localhost' IDENTIFIED BY 'dbname';

GRANT USAGE ON * . * TO 'dbname'@'localhost' IDENTIFIED BY 'dbname' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

CREATE DATABASE IF NOT EXISTS `dbname`;

GRANT ALL PRIVILEGES ON `dbname` . * TO 'dbname'@'localhost';

DROP DATABASE `test`


 小技
http://www.phppro.jp/school/mysql/vol17/2


 郵便番号データ用 テーブル
CREATE TABLE IF NOT EXISTS `zip_temp` (
`jis` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
`zip_old` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
`zip` varchar(7) COLLATE utf8_unicode_ci DEFAULT NULL,
`addr1_kana` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`addr2_kana` varchar(511) COLLATE utf8_unicode_ci DEFAULT NULL,
`addr3_kana` varchar(511) COLLATE utf8_unicode_ci DEFAULT NULL,
`addr1` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`addr2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`addr3` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`tmp1` int(1) DEFAULT NULL,
`tmp2` int(1) DEFAULT NULL,
`tmp3` int(1) DEFAULT NULL,
`tmp4` int(1) DEFAULT NULL,
`tmp5` int(1) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
参考URL
郵便番号データダウンロード
郵便番号データの説明


 CSV インポート エクスポート
インポート
load data local infile "/data.csv" into table `dbname`.`table_name` fields terminated by ',';

エクスポート
select * from `database` into outfile "/data.csv" fields terminated by ',';


 郵便データ 取り込み
# /usr/local/mysql/bin/mysql -u username -p --enable-local-infile
Enter password:

mysql> load data local infile "/tmp/data.csv" into table `db_name`.`table_name` fields terminated by ',';


 郵便データ xamppへ取り込み
コマンドプロンプトを管理者権限で起動

c:\>cd /d D:\
d:\>cd xampp\mysql\bin
d:xampp\mysql\bin>mysql -u root
mysql>use db;
Database changed
mysql>load data local infile "/data.csv" into table `db_name`.`table_name` fields terminated by ',';

csvファイルはあらかじめ、ダウンロードし、ダブルクォーテンションなどをエスケープもしくは削除しておくこと


 クエリログ
xampp
xampp\mysql\bin\my.ini
CentOS 6
/etc/my.cnf

[mysqld]
クエリログ general_log = 1
general_log_file = /var/log/mysql/mysql.log
スロークエリ slow_query_log = 1
ログファイルの場合
slow_query_log_file = mysql-slow.log
テーブルに保存する場合
log_output = TABLE
long_query_time = 0.1
0にするとすべてのクエリを保存する。

テーブルに保存した場合
mysql.slow_log
mysql.general_log
に保存される。
参考URL
漢(オトコ)のコンピュータ道 MySQL 5.1のスロークエリログ
__19XX0707__ slow_query_logを保存する場合


更新 2016.10.30