FreeBSD 10.2にMySQL 5.6をインストール&外部接続許可 FreeBSD 10.2にMySQL 5.6をインストールした時のメモです。 インストールと起動 pkgコマンドでインストールしました。 # pkg install mysql56-server # pkg install php56-pdo_mysql # pkg install php56-mysqli # pkg install php56-mysql 起動を行う前に、/etc/rc.confに1行追記します。 # vi /etc/rc.conf 内容は以下の1行。 mysql_enable="YES" これを記載していないと、起動時こんなエラーメッセージが表示されます。 Cannot 'start' mysql. Set mysql_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'. 追記が終わったら、MySQLを起動。 # /usr/local/etc/rc.d/mysql-server start ユーザー:root、パスワード無しで接続できます。 # mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.24 Source distribution Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 文字コードの設定 文字コードにutf-8を使用するようにします。 現在の文字コードは「show variables like "chara%";」で確認できます。 初期状態は以下のとおり。 mysql> show variables like "chara%"; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/share/mysql/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.00 sec) /usr/local/my.cnfを編集。 # vi /usr/local/my.cnf 赤字の部分を追記しました。 [client]はセクションごと追加します。 [mysqld] ... sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES character-set-server=utf8 skip-character-set-client-handshak [client] default-character-set=utf8 MySQLを再起動。 # /usr/local/etc/rc.d/mysql-server restart utf-8に変更できました。 mysql> show variables like "chara%"; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/share/mysql/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.00 sec) ユーザーの作成と外部接続許可 adminというユーザーを作成し、外部からの接続を許可してみます。 以前書いた記事を参考にしました。 MariaDB 5.5の外部接続許可 ユーザー「admin」をパスワード「P@ssw0rd」で作成。 外部からの接続を受け入れます。 mysql> grant all privileges on *.* to admin@'%' identified by 'P@ssw0rd' with grant option; Query OK, 0 rows affected (0.00 sec) mysql> 接続してテスト用のデータベース、テーブルを作りました。 # mysql -uroot mysql> create database sample; mysql> use sample Database changed mysql> create table test (id int, name varchar(100)); mysql> insert into test (id,name) values (1, 'test1'); mysql> insert into test (id,name) values (2, 'test2'); 別の端末から適当に作成したPythonプログラムでデータを読み取ってみます。 # -*- coding:utf-8 -*- import pymysql con = pymysql.connect(host='192.168.1.102', user='admin', password='P@ssw0rd', db='sample', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) cur = con.cursor() cur.execute('select * from test') for row in cur: print row['id'], row['name'] cur.close() con.close() ちゃんと接続できていますね。 $ python sample.py 1 test1 2 test2