MySQLの文字コードをUTF-8に変更

PHPからPDOを使用してMySQLに接続する際に、文字コードの関係で日本語が表示できないことがあったので, その際の設定メモ. 

環境

OS : CentOS 6

PHP7.2.12

MySQL5.1.71

 MySQLの設定

show variables like '%char%';

上記コマンドでデータベースの文字コード設定を確認します.

f:id:shsm385:20190220181319p:plain

文字コードが latin1 になっていることが確認できます.

今回は文字コードutf-8 に変更していきます.  /etc/my.cnf という設定ファイルから変更を行います.

[mysqld]
# [mysqld] の最後尾部分に追記
character-set-server=utf8

# 追記
[client]
default-character-set=utf8

上記の設定を追加してmysql server を再起動させます.

f:id:shsm385:20190220182121p:plain

再起動を行ったら, データベースの文字コードをもう一度確認します.

f:id:shsm385:20190220182403p:plain

PHPでの文字コードの指定

$db['host'] = 'localhost';
$db['user'] = 'user';
$db['pass'] = '*************';
$db['dbname'] = 'db name';

$dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
      try{
        $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
        $sql =  "select * from tablename";
        $stmt = $pdo->query($sql);
        foreach($stmt as $res){
           print_r($res);
        }
        $stmt->closeCursor();
      }catch(PDOException $e){
        $errormsg = 'Error Database';
        $e->getMessage();
      }

上記コードの charset='' の部分で文字コードの指定を行います.

 

自分はMySQLのバージョンが5.1.71なので, 使えませんでしたが, 5.3 から "utf8mb4"が使用可能なので、そちらで設定したほうがよさそう.

 

ファイルをbackupするコマンドの作成

AWS上でサーバーを運用するときに、ファイルをバックアップするコマンドがほしかった時のメモ.

 

 ソースコード

#!/bin/bash

LANG=C

T=$(echo $1 | sed 's/\/$//')
cp -a $T $T.$(date +%Y%m%d%H%M%S)
if [ $? -ne 0 ] ; then
    echo "FAILED" >&2
    exit 1
fi
exit 0

上記を .bash_profile に書き込む, もしくはディレクトリの中のどこかにファイルを作ってpathを通す.

Linuxコマンドの調べ方

linuxMac OS を触り始めた友人から、コマンドの一覧を調べるコマンドないの?

と聞かれて調べたときのメモ.

bashの組み込みコマンド

$ bash -c help

cd コマンドや pwd コマンドなどの bash の組み込みコマンドを調べるときには bash のヘルプを確認する.

自分で設定したエイリアス

$ alias

alias コマンドで確認する.

その他の実行可能な形式のコマンド

$ for cmd in ${PATH//:/ }; do ls -1 $cmd; done | sort | uniq

上記 2 つ以外のコマンドはこれで確認できるはず.

【Mac】pythonをインストールするときにzipimport.ZipImportError: zlib not available

pyenvでpython3.6.5をインストールする際にタイトルにあるようなエラーがでて怒られたのでその際の対処法のメモ

環境

OS : MacOS Mojave 

homebrew : 1.7.7

エラーの内容

Traceback (most recent call last): File "/private/var/folders/37/n_9qx5n15493wlz5cbbzt2fw0000gq/T/python-build.20181017165821.27141/Python-3.6.6/Lib/ru npy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/private/var/folders/37/n_9qx5n15493wlz5cbbzt2fw0000gq/T/python-build.20181017165821.27141/Python-3.6.6/Lib/ru npy.py", line 85, in _run_code exec(code, run_globals) File "/private/var/folders/37/n_9qx5n15493wlz5cbbzt2fw0000gq/T/python-build.20181017165821.27141/Python-3.6.6/Lib/en surepip/__main__.py", line 5, in <module> sys.exit(ensurepip._main()) File "/private/var/folders/37/n_9qx5n15493wlz5cbbzt2fw0000gq/T/python-build.20181017165821.27141/Python-3.6.6/Lib/en surepip/__init__.py", line 204, in _main default_pip=args.default_pip, File "/private/var/folders/37/n_9qx5n15493wlz5cbbzt2fw0000gq/T/python-build.20181017165821.27141/Python-3.6.6/Lib/en surepip/__init__.py", line 117, in _bootstrap return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths) File "/private/var/folders/37/n_9qx5n15493wlz5cbbzt2fw0000gq/T/python-build.20181017165821.27141/Python-3.6.6/Lib/en surepip/__init__.py", line 27, in _run_pip import pip._internal zipimport.ZipImportError: can't decompress data; zlib not available make: *** [install] Error 1

対処法

MacOSでzlibがないときにはcommand line developer tools を導入のあたりが原因であることが多いみたいなので、 xcode-select --install を行う.

$ xcode-select --install
xcode-select: error: command line tools are already installed, use "Software Update" to install updates

すでに入っていたため別のことが原因らしい.

brew doctorやbrew install zlibでzlibのインストールを行ってみたけどエラーが消えませんでした.

High Sierraまでは上記の方法でかいけつできるようです. しかし, MojaveではmacOS SDK headerが現在デフォルトで入っていないようなので, マニュアルで導入する必要があるようです.

macos - Brew install on Mojave - Stack Overflow

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

上記のコマンドで導入するとpythonをインストールすることができるようになりました.

macでssh接続をしたときno matching key exchange method found. Their offer: diffie-hellman-group1-sha1と言われて接続できない

macssh接続を行ったときにタイトルのようなエラーが出て接続できなかったのでその時のメモ

環境

macOS Mojave バージョン10.14

エラーの内容 

Unable to negotiate with 192.168.*.* port 22: 
no matching key exchange method found. 
Their offer: diffie-hellman-group1-sha1

上記のようなエラーがでて接続できません.

原因

MacOSではOpenSSH v7 を採用するようなっていくつかの暗号が無効になってしまったようです. 

Apple、macOS SierraでOpenSSH v7を採用。いくつかのレガシーな暗号が無効に。 | AAPL Ch.

解決法

サーバー側のOpenSSHのバージョンを上げたほうが良いのですが, できない状態だったので次のように解決します.

~/.ssh/config ファイルの中身に以下の設定を書き足す.

(configファイルがなければ作成して書き込んでください.)

Host 192.168.*.*
KexAlgorithms +diffie-hellman-group1-sha1

補足

自分の環境では上記の問題を解決したあとにも次のようなエラーがでて接続できませんでした.

Unable to negotiate with 192.168.77.36 port 22: 
no matching cipher found. Their offer: 
aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc

これもレガシーな暗号が無効になってしまったことが原因なので, ~/.ssh/config ファイルの中の設定を変更します.

Host 192.168.*.*
KexAlgorithms +diffie-hellman-group1-sha1
Ciphers aes128-cbc # 追加

これでssh接続が可能になりました.

 

 

自分でつかったコマンドのログを取る

自分でサーバーでなんのコマンドを使ったかログを取りたいときのメモ。

 コード

#! /bin/bash

mkdir -p ~/Log 2>/dev/null
script -f ~/Log/$(date +%Y%m%d_%H%M%S)_$(whoami).log

自分のホームディレクトリに Log というディレクトリを作って, その中に日付をいれてコマンドのログを保存する形。

.bash_profile の中に書いておくと便利.

CentOS 7 での CUI と GUI の切り替え

CentOS 7 で GUICUI を切り替える際のメモ

inittab の確認

linux の初期起動時の設定ファイルである inittab を確認します.

cat /etc/inittab

すると次のように書かれていました.

f:id:shsm385:20180831111321p:plain

初期設定を inittab に書き込まないで systemd を使うようになりましたとのことです.
なので書かれているとおりにしていけば設定を切り替えられるようです.

現在の設定の確認

systemctl get-default

現在の設定を確認できます. multi-user.target だと CUI の設定がデフォルトになっていて
graphical.target だと GUI の設定がデフォルトになっています.

CUI への切り替え

 systemctl isolate multi-user.target # 一時的に変更
 systemctl set-default multi-user.target # 永続的に変更

上記のコマンドで CUI に変更できます.

GUI への切り替え

 systemctl isolate graphical.target # 一時的に変更
 systemctl set-default graphical.target # 永続的に変更

上記のコマンドで GUI に変更できます.