○ MySQLのインストール

・xoopsサイト構築のためデータベースとして利用します
・mysql-5.5.56をソースからインストールし、設定しています
・ALLFreeなライセンスでないので注意します
・datadirを/home/mysqlに変更しています
・mysqlサイトのrpmパッケージではsecure-file-privが設定されていて
・データの入出力が特定のディレクトリ(/var/lib/mysql-files)に制限されます
・5.5.5移行default-storage-engineがInnoDBになっています
・make はメンテナンスマシンで行っています

・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:mysql-5.5.56.tar.gz (http://dev/mysql.com/)

○参照ファイル

パッケージの追加
最初の設定 (Xen)
opensslのインストール

○インストール環境

:OS CentOS 6.9
:selinux disabled or permissive
:インストール先  /usr/local/
:作業 ~/src
:言語 en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○mysql-5.5.56

○rpmパッケージの削除

・CentOS 6.4ではpostfixとの依存性があります

[root@jupiter:~]
# rpm -e --test mysql-libs
# rpm -e mysql-libs

○ユーザmysqlの作成

uid/gid情報を参照します

[root@jupiter:~]
# groupadd -g 27 mysql
# useradd -M -u 27 -g 27 -d /home/mysql -s /sbin/nologin mysql
# mkdir /var/lib/mysql
# chown -R mysql:mysql /var/lib/mysql

○mysqlのインストール

・openssl-develを必要とします

# cd ~/src
[root@jupiter:~/src]
# tar zxvf mysql-5.5.56.tar.gz
# chown -R root:root mysql-5.5.56
# cd mysql-5.5.56
[root@jupiter:~/src/mysql-5.5.56]
# rm CMakeCache.txt
# make clean

・コンフィグシェルスクリプトを実効します
・再実効の場合は、先にCMakeCache.txtを削除します
・同じディレクトリで実行します
mysql5cfg.sh (詳細別記)

[root@jupiter:~/src/mysql-5.5.56]
# source mysql5cfg.sh

・オプションの確認 (CMakeCache.txtを読み込む)

# cmake . -LAH

・コンパイル

# make

・インストール (アップデートは別項参照)

# make install

# cd ~/src
[root@jupiter:~/src]
# tar cf mysql-5.5.56-170516.tar mysql-5.5.56/
# bzip2 mysql-5.5.56-170516.tar

○アップデート

・新規インストールの場合は、次項へ進みます
・ソースの展開・コンパイルの表記は略します

・デフォルト設定ファイル(旧)を保存します

# cp -a /usr/local/mysql/support-files ~/src/mysql5555

・アップデート

# cd ~/src/mysql-5.5.56
[root@jupiter:~/src/mysql-5.5.56]
# make install

・新旧の設定ファイルの差分を取り、設定ファイルを修正します
・ファイルの修正は略します

# cp -a /usr/local/mysql/support-files ~/src/mysql5556
# cd ~/src
[root@jupiter:~/src]
# diff -urp mysql5555 mysql5556

・キャッシュ情報の更新

# ldconfig
# ldconfig -p | grep mysql

・再起動します

# service mysql.server restart

・mysqlを利用しているサーバを再起動します

# service httpd restart

○キャッシュ情報の更新

・/etc/ld.so.conf.d/mysql.confに既述します
・mysql-5.0.xライブラリのso-versionは、(15) になっています
・mysql-5.1.xライブラリのso-versionは、(16) になっています
・mysql-5.5.xライブラリのso-versionは、(18) になっています

# cd ~
[root@jupiter:~]
# echo /usr/local/mysql/lib >> /etc/ld.so.conf.d/mysql.conf

・キャッシュの更新

# ldconfig
# ldconfig -p | grep mysql
    libmysqld.so.18 (libc6) => /usr/local/mysql/lib/libmysqld.so.18
    libmysqld.so (libc6) => /usr/local/mysql/lib/libmysqld.so
    libmysqlclient.so.18 (libc6) => /usr/local/mysql/lib/libmysqlclient.so.18
    libmysqlclient.so (libc6) => /usr/local/mysql/lib/libmysqlclient.so

○mysqlコマンドにPATHを通す

・~/.bash_profileにPATHの設定をします 設定後 再ログイン

・省略

PATH=$PATH:/usr/local/mysql/bin
export PATH

・省略


○サーバ用my.cnfのコピー

・/usr/local/mysql/support-filesからmy-medium.cnfをコピーします

[root@jupiter:~]
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

○my.cnfファイルを修正します

/etc/my.cnf (詳細別記)

○MySQLシステムデータベースをつくります

・既存のDBを使う場合はmysql_install_dbを実行しない --> 下記参照
・mysqlのbasedirに移動し、scripts/mysql_install_dbを実行します
・/home/mysqlのユーザ・グループ・パーミッションを変更します

# cd /usr/local/mysql
[root@jupiter:/usr/local/mysql]
# scripts/mysql_install_db --user=mysql --datadir=/home/mysql

・mysql,performance_schema,testディレクトリとファイルが作られます

# chown -R mysql:mysql /home/mysql
# chmod 751 /home/mysql

○自動起動スクリプトのコピー

・起動ファイルをコピーします

[root@jupiter:~]
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d
# chmod 755 /etc/init.d/mysql.server

○tcp_wrappersで制御します

・"-DWITH_LIBWRAP=ON"オプションを付けて構築した場合
・/etc/hosts.allow、hosts.denyで制御します

:/etc/hosts.allow

ALL: 127.0.0.1
mysqld: 192.168.0. EXCEPT 192.168.0.21

:/etc/hosts.deny

ALL: ALL

○selinuxヘの対応 (selinuxが有効の場合)

:新規インストールファイルのselinuxラベルを修正

[root@jupiter:~]
# restorecon -Rv /etc
# restorecon -Rv /usr/local/mysql
# restorecon -RFv /home/mysql
# restorecon -Rv /var/lib/mysql

○mysqlの起動

:自動起動をonにし、mysqldを起動します

[root@jupiter:~]
# chkconfig --add mysql.server
# service mysql.server start

:rootパスワードを設定します

・mysql-5.1.Xの既存のDBを使う場合はパスワードの設定を実行しない
・linux管理者のrootではないので、パスワードは変えます
・フルドメイン名はmysqlを設置したサーバ名です
・/root/.bash_historyにパスワードが平文で記録されるので注意

[root@jupiter:~]
# mysqladmin -u root password 'xxxxxxxxxx'
# mysqladmin -u root -h earth.528p.com password 'xxxxxxxxxx'

○mysql-5.1.Xの既存のDBを使う

・既存ディレクトリのバックアップ
・mysql_upgrade を実行します
・(xxxxxxxxxxは既存のDB管理者[root]のパスワード)

# cd /home
[root@jupiter:/home]
# cp -a mysql mysql-OLD

・mysqlを再起動しておく

# service mysql.server restart

・DBのアップグレード

# mysql_upgrade --password=xxxxxxxxxx

・省略

Running 'mysql_fix_privilege_tables'...
OK

・performance_schemaディレクトリとファイルが追加されます


○mysqlログのローテーション

・mysqlに付属の設定ファイルをコピーします

[root@jupiter:~]
# cp /usr/local/mysql/support-files/mysql-log-rotate /etc/logrotate.d

:/etc/logrotate.d/mysql-log-rotate (root root 644)

・mysqladminコマンドはmysql管理者のパスワードを要求します
・"mysqladmin flush-logs"でバイナリログを更新します
紫色部分 変更

/var/lib/mysql/*.log {
        #create 600 mysql mysql
        notifempty
        weekly
        rotate 4
        missingok
        #compress
    postrotate
        # just if mysqld is really running
        if test -x /usr/local/mysql/bin/mysqladmin && \
           /usr/local/mysql/bin/mysqladmin --defaults-extra-file=/root/.my.cnf ping &>/dev/null
        then
           /usr/local/mysql/bin/mysqladmin --defaults-extra-file=/root/.my.cnf flush-logs
        fi
    endscript
}

:/root/.my.cnf (root root 600)

・インストール時には、一時的に退避しておく(設定コマンドでエラー)
・passwordを平文で設定するのでパーミッションに注意
・mysqldumpと共用するので[client]で使用出来るように設定します

[client]
user=root
password=xxxxxxxxxxxx

:logrotationの確認

・うまくいかない場合、設定ファイルを修正します
・var/lib/logrotate.statusにrotateした日付が設定されます

[root@jupiter:~]
# logrotate -fv /etc/logrotate.d/mysql-log-rotate

○mysql_configの修正

・phpのconfigureでmysql_configを指定しうまくいかない場合
・-lprobes_mysqlの部分を削除します

:/usr/local/mysql/bin/mysql_config

・省略

# Create options 
# We intentionally add a space to the beginning and end of lib strings, simplifies replace later
# libs=" $ldflags -L$pkglibdir -lmysqlclient   -lpthread -lprobes_mysql -lz -lm -lrt -lssl -lcrypto -ldl "
libs=" $ldflags -L$pkglibdir -lmysqlclient   -lpthread -lz -lm -lrt -lssl -lcrypto -ldl "
libs="$libs   "
# libs_r=" $ldflags -L$pkglibdir -lmysqlclient_r   -lpthread -lprobes_mysql -lz -lm -lrt -lssl -lcrypto -ldl   "
libs_r=" $ldflags -L$pkglibdir -lmysqlclient_r   -lpthread -lz -lm -lrt -lssl -lcrypto -ldl   "
embedded_libs=" $ldflags -L$pkglibdir -lmysqld    -lpthread -lz -lm -lrt -lprobes_mysql -lssl -lcrypto -lwrap -lcrypt -ldl -laio    "

if [ -r "$pkglibdir/libmygcc.a" ]; then

・省略




○簡単なmysqlの操作

・/root/.mysql_historyにパスワードが平文で記録されるので注意
・root (mysql管理者) でログインします

[root@jupiter:~]
# mysql -u root -p
password:← パスワードの入力

・データベースの作成 (例 cubedata)

mysql> create database cubedata;

・データベースに全権を持つユーザーの作成
 (例 cubedata,ユーザーuranus,パスワードyyyyyyyyyy)

mysql> grant all on cubedata.* to uranus@localhost identified by 'yyyyyyyyyy';
mysql> flush privileges;

・データベースの削除 (例 test)

mysql> drop database test;
mysql> flush privileges;

・匿名ユーザーの削除

mysql> delete from mysql.user where user='';
mysql> flush privileges;

・データベースの表示

mysql> show databases;

・ユーザーテーブルの表示

mysql> select host,user,password from mysql.user;

・ログアウト

mysql> exit;

○データベースの文字コードをutf8mb4にする

・xoopsのデータベース"cubedata"の場合

・mysqldumpの文字セットをbinaryに指定してデータをエクスポートします

# cd /home
[root@jupiter:/home]
# mysqldump -u root -p cubedata --default-character-set=binary > cubedata.dat
password:← パスワードの入力

・現在のデータベースをいったんdropしておきます
・データベースを(utf8mb4で)createします

# mysql -u root -p
password:← パスワードの入力
mysql> drop database cubedata;
mysql> CREATE DATABASE cubedata DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
mysql> exit;

・エクスポートしたデータを(charsetにutf8mb4指定して)インポートします

# mysql -u root -p cubedata --default-character-set=utf8mb4 < cubedata.dat
password:← パスワードの入力

・/etc/my.cnfの修正

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
skip-character-set-client-handshake

[mysql]
default-character-set=utf8mb4

・mysqlの再起動

# service mysql.server restart

○文字コードの確認

・全体の文字コードの確認

# mysql -u root -p
password:← パスワードの入力
mysql> status;

・データベースごとの文字コードの確認

mysql> use cubedata;
Database changed
mysql> SHOW VARIABLES LIKE '%character%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8mb4                          |
| character_set_connection | utf8mb4                          |
| character_set_database   | utf8mb4                          |
| character_set_filesystem | binary                           |
| character_set_results    | utf8mb4                          |
| character_set_server     | utf8mb4                          |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.01 sec)

mysql> SHOW VARIABLES LIKE '%collation%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)

mysql> exit;

○ Copyright(c) 528p.com All Rights Reserved.