Ubuntu(Indigo) 初期設定

ローカルにあるSQLiteをIndigo上のMySQLにエクスポートする実験。

SSH接続

公開鍵方式でのSSH接続、OSでUbuntuを選択すると、自然とユーザー名はubuntuとなる模様。

ufw

最初は起動されていない

sshを許可
sudo ufw allow 22/tcp;
あるいは、
sudo ufw allow ssh;

一度だけ起動なら、
sudo ufw enable;
自動起動なら、
sudo systemctl enable ufw
あるいは、
sudo /etc/init.d/ufw start

再起動
sudo ufw reload;

状態
sudo ufw status;

MySQL

インストール
sudo apt-get install mysql-server

バージョン確認
sudo mysql –version

my.cnfを探す
sudo mysql –help | grep my.cnf
今回は
/etc/mysql/mysql.conf.d/mysqld.cnf

bind-address(ここで指定したIPのみ接続を受け付ける)をコメントアウト。接続するIPがわかる場合は指定しても大丈夫だが、複数のIPは指定できない。

文字コード確認
show variables like ‘char%’;

| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |

mysqld.cnfに下記を追加する。
[mysqld]

character-set-server = utf8

これで、utf8に変わる。

| 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/share/mysql/charsets/ |

DB作成
create database db character set utf8;

ユーザー作成
mysql > create user user@host identified by ‘1234’;
ちなみに、auth_socket認証とする場合、
mysql > create user user@host identified with auth_socket;

MySQLのrootアカウントは標準でauth_socket認証しており、パスワード設定しても、パスワード無しでログインできる。ここで少しつまづいた。

権限設定(ユーザー作成)
mysql > grant select,insert,update,delete on db.table to user@host
ちなみに、ユーザーが存在しない場合作成されるので、
grant select,insert,update,delete on db.table to user@host identified by ‘1234’;
とすればパスワード付きで作成される。

権限設定(ユーザー作成)をシェルからワンライナー
pass=$(head /dev/urandom | tr -dc a-km-np-z1-9 | head -c 13); sudo mysql -u root -e “grant select,insert,update,delete on db.table to user@host identified by ‘${pass}'”; echo $pass;

権限確認
mysql > show grants for user@host;

権限削除
mysql > revoke all, grant option from user@host;

パスワード設定(変更)
mysql > alter user user@host identified by ‘2345’;
あるいは、
mysql > update mysql.user set authentication_string=password(‘3456′) where user=’user’;

パスワード設定をシェルからワンライナーの場合、
pass=$(head /dev/urandom | tr -dc a-km-np-z1-9 | head -c 13); sudo mysql -u root -e “alter user user@host identified by ‘${pass}'”; echo $pass;

アカウント情報確認
mysql > select host, user, authentication_string, plugin from mysql.user;

固定IP以外からの接続

MySQLのbind-addressは複数指定できず、ユーザーのホスト部を頻繁に変更するのも手間なのでufwで弾くのが簡単。

sudo ufw allow from IPアドレス to any port 3306 proto tcp
これで、特定のIPのみMySQLに接続できる。

IPアドレスが変更になったら、
sudo ufw status numbered
でNoを確認し、
sudo ufw delete 番号
(複数不可)
で該当ルールを削除し、再度、
sudo ufw allow from IPアドレス to any port 3306 proto tcp
で変更後のIPアドレスを指定する。

SQLiteをMySQLへエクスポート

DB Browser for SQLiteにて、
ファイル>エクスポート>データベースをSQLファイルへ

・insert into にカラム名を保持
・insert文に複数行(VALUES)
にチェック。

・すべてをエクスポート、
・古いスキーマを上書き(DROP TABLE した後に CREATE TABLE)
を選択。
(DROPしないと何度か実行するときに作成済みのテーブルが残ったりする)

書き出したSQLファイルを下記の通り修正。それぞれデータの内容によって違うが、今回は、
・先頭のBIGIN TRANSACTIONをSTART TRANSACTIONに変更。
・全てのダブルクォーテーションの削除
(テーブル名やカラム名のダブルクォーテーションがダメ)
・CREATE TABLEで型が抜けている部分に追加。
・全ての型をtextに変更。
・PRIMARY KEY()を削除。
(上の行末のカンマも削除)

ファイルサイズが大きいので、WinSCPでアップロードし、
mysql -u root -p db名 < SQLファイル.sql
として実行。