phpPgAdmin

Posted by muchag | PostgreSQL |
初回投稿:2019-11-23 (土) 21:43:05 | 最終更新:2019-11-24 (日) 12:00:36

【環境】
phpPgAdmin: 5.6
PostgreSQL: 12.1
配置
DL

SourceForge:phpPgAdmin ダウンロードページ より、DL。
2019-11-23 現在
phppgadmin-REL_5-6-0.zip

配置

解凍して出てきた

phppgadmin-REL_5-6-0

を ppa とリネームして、CakePHP4 の webroot ディレクトリ直下へ配置。

.gitignore
.gitignore

/webroot/ppa/*
設定
設定ファイルリネーム
/webroot/ppa/conf/config.inc.php-dist

/webroot/ppa/conf/config.inc.php

とリネーム。

設定
ホスト名

- $conf['servers'][0]['host'] = '';
+ $conf['servers'][0]['host'] = 'localhost';
  $conf['servers'][0]['host'] = '192.168.xxx.xxx'; <- IP 直打ちも可
DB 名

- $conf['servers'][0]['defaultdb'] = 'template1';
+ $conf['servers'][0]['defaultdb'] = 'hoge';
言語

- $conf['default_lang'] = 'auto';
+ $conf['default_lang'] = 'japanese';
スーパーユーザログイン

phpPgAdmin では、pgsql, postgres, root, administrator というユーザ名でのログインは
制限されているとのこと。

今回はローカル環境でのテストインストールなので
これを解除してみる。


- $conf['extra_login_security'] = true;
+ $conf['extra_login_security'] = false;
参考サイト

Qiita:ローカル環境PostgreSQL + phpPgAdmin でデフォルトユーザーでログインできないときの対処(2016-12-24)

テーマ
選択肢

ppa トップページでテーマを選択することができる。
とりあえず

  • Default
  • Cappuccino
  • Blue/Green
  • Bootstrap3

の4種から選べる。

ディレクトリ

これらが

/webroot/ppa/themes

こちらにある

  • bootstrap(Bootstrap3)
  • cappuccino(Cappuccino)
  • default(Default)
  • gotar(Blue/Green)

に対応している。

今回は、Cappuccino にしてみた。

カスタマイズ

.topbar, .trail {
	color: #fff;
	background-color: #363330;
	margin: 0;
	padding: 0;
	text-align: left;
}

Chrome で見ているけど、キャッシュがきつく、
スーパーリロードも効かない。
一晩寝かせたら、やっと反映された。

ドライバ
エラー

設定を終えて、ppa へアクセスしてみたら、下記エラーが出た。

データベースをサポートするように PHP のコンパイル・インストールがされていません。
configure の --with-pgsql オプションを用いて PHP を再コンパイルする必要があります。
インストール

PHP の PostgreSQL ドライバを追加インストール。


yum install -y --enablerepo=remi --enablerepo=remi-php74 php-pgsql

__snip__

インストール:
  php-pgsql.x86_64 0:7.4.0~RC6-15.el7.remi

完了しました!
Apache 再起動

Apache を再起動して、無事 phpPgAdmin が表示された。


systemctl restart httpd
ログイン

現状は、パスワードなしのログイン方法しかわかっていない。

それでも、事前 設定 が必要。

試行錯誤
ドライバ
依存性
依存解決エラー?

PostgreSQL のドライバをインストールしようとしたら
こんな感じになった。


yum install -y php-pgsql

__snip__

updates                                                  | 2.9 kB     00:00
(1/3): epel/x86_64/updateinfo                              | 1.0 MB   00:01
(2/3): remi-safe/primary_db                                | 1.6 MB   00:04
(3/3): epel/x86_64/primary_db                              | 6.9 MB   00:11
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php-pgsql.x86_64 0:5.4.16-46.1.el7_7 を インストール
--> 依存性の処理をしています: php-pdo(x86-64) = 5.4.16-46.1.el7_7 のパッケージ: php-pgsql-5.4.16-46.1.el7_7.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: php-pgsql-5.4.16-46.1.el7_7.x86_64 (updates)
             要求: php-pdo(x86-64) = 5.4.16-46.1.el7_7
            インストール: php-pdo-7.4.0~RC6-15.el7.remi.x86_64 (@remi-php74)
                php-pdo(x86-64) = 7.4.0~RC6-15.el7.remi
            利用可能: php-pdo-5.4.16-46.el7.x86_64 (base)
                php-pdo(x86-64) = 5.4.16-46.el7
            利用可能: php-pdo-5.4.16-46.1.el7_7.x86_64 (updates)
                php-pdo(x86-64) = 5.4.16-46.1.el7_7
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest
解決

そこで、php アップデート のときのコマンドを参考に
前述のようにしたら、無事にドライバをインストールできた。

ログイン

ユーザ名を、postgres。
パスワードは、なし、ALTER ROLE で再設定後の両方を試したけど
ログインできない。

対応

ドキュメント を見てみたら
Support for PostgreSQL 8.4.x, 9.x, 10.x, 11.x
あ、れ?
もしかして、12.1 だから?
多分そういう問題ではないよね。。。

一部解決

設定 をしたら、パスワードなしならログインできるようになった。

Posted by muchag | PostgreSQL |
初回投稿:2019-11-23 (土) 21:43:05 | 最終更新:2019-11-24 (日) 12:00:36

DELETE

Posted by muchag | MySQL |
初回投稿:2019-11-23 (土) 13:35:17 | 最終更新:2019-11-23 (土) 13:35:17

【環境】
MySQL: 8.0.13
リレーション

テーブルを結合して一括削除を行う場合。

DELETE の後に、テーブルエイリアスを書く必要があるとのこと。


DELETE
    h <- これがミソ
FROM
    `hoges` AS h
LEFT JOIN `moges` AS m
    ON m.`hoge_id` = h.`id`
WHERE
    h.`id` = 5

知らなかった。。。

確かに、ミソのところがないと、構文エラーとなる。

これがエイリアスでなくて、テーブル名の直書きだったらどうなのかとか
未調査。

参考サイト

Qiita:mysqlでjoinした結果をdelete(2015-01-27)

Posted by muchag | MySQL |
初回投稿:2019-11-23 (土) 13:35:17 | 最終更新:2019-11-23 (土) 13:35:17

操作

Posted by muchag | PostgreSQL |
初回投稿:2019-11-17 (日) 21:30:18 | 最終更新:2020-08-10 (月) 14:46:24

【環境】
PostgreSQL: 12.1
CentOS: 7.5.1804
ユーザ切り替え

su - postgres
最終ログイン: 2019/11/17 (日) 19:40:30 JST日時 pts/0

全てはここから。

ログイン
ログイン

psql
psql (12.1)
"help"でヘルプを表示します。

で、下記のような、SQL 文入力待機状態になる。



ログアウト

\q

exit も有効。

確認
バージョン
ログイン前

psql --version
psql (PostgreSQL) 12.1
ログイン後

SELECT version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
ユーザ一覧

\du
                                             ロール一覧
 ロール名 |                                   属性                                   | 所属グループ
----------+--------------------------------------------------------------------------+--------------
 postgres | スーパユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}
データベース一覧
ログイン前

ppsql -l
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
 postgres  | postgres | UTF8             | C        | C                 |
 template0 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
ログイン後

\l
                                        データベース一覧
   名前    |  所有者  | エンコーディング | 照合順序 | Ctype(変換演算子) |     アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
 postgres  | postgres | UTF8             | C        | C                 |
 template0 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | C        | C                 | =c/postgres          +
           |          |                  |          |                   | postgres=CTc/postgres
設定

SHOW all;
SHOW [設定名];
ヘルプ
ログイン前

psql --help
ログイン後
コマンドヘルプ

\?
SQL ヘルプ

\h
利用可能なヘルプ:
  ABORT                            ALTER PROCEDURE                  ALTER VIEW                       CREATE FOREIGN TABLE             CREATE TABLESPACE                DROP DATABASE                    DROP SCHEMA                      GRANT                            SELECT
  ALTER AGGREGATE                  ALTER PUBLICATION                ANALYZE                          CREATE FUNCTION                  CREATE TEXT SEARCH CONFIGURATION DROP DOMAIN                      DROP SEQUENCE                    IMPORT FOREIGN SCHEMA            SELECT INTO
  ALTER COLLATION                  ALTER ROLE                       BEGIN                            CREATE GROUP                     CREATE TEXT SEARCH DICTIONARY    DROP EVENT TRIGGER               DROP SERVER                      INSERT                           SET
  ALTER CONVERSION                 ALTER ROUTINE                    CALL                             CREATE INDEX                     CREATE TEXT SEARCH PARSER        DROP EXTENSION                   DROP STATISTICS                  LISTEN                           SET CONSTRAINTS
  ALTER DATABASE                   ALTER RULE                       CHECKPOINT                       CREATE LANGUAGE                  CREATE TEXT SEARCH TEMPLATE      DROP FOREIGN DATA WRAPPER        DROP SUBSCRIPTION                LOAD                             SET ROLE
  ALTER DEFAULT PRIVILEGES         ALTER SCHEMA                     CLOSE                            CREATE MATERIALIZED VIEW         CREATE TRANSFORM                 DROP FOREIGN TABLE               DROP TABLE                       LOCK                             SET SESSION AUTHORIZATION
  ALTER DOMAIN                     ALTER SEQUENCE                   CLUSTER                          CREATE OPERATOR                  CREATE TRIGGER                   DROP FUNCTION                    DROP TABLESPACE                  MOVE                             SET TRANSACTION
  ALTER EVENT TRIGGER              ALTER SERVER                     COMMENT                          CREATE OPERATOR CLASS            CREATE TYPE                      DROP GROUP                       DROP TEXT SEARCH CONFIGURATION   NOTIFY                           SHOW
  ALTER EXTENSION                  ALTER STATISTICS                 COMMIT                           CREATE OPERATOR FAMILY           CREATE USER                      DROP INDEX                       DROP TEXT SEARCH DICTIONARY      PREPARE                          START TRANSACTION
  ALTER FOREIGN DATA WRAPPER       ALTER SUBSCRIPTION               COMMIT PREPARED                  CREATE POLICY                    CREATE USER MAPPING              DROP LANGUAGE                    DROP TEXT SEARCH PARSER          PREPARE TRANSACTION              TABLE
  ALTER FOREIGN TABLE              ALTER SYSTEM                     COPY                             CREATE PROCEDURE                 CREATE VIEW                      DROP MATERIALIZED VIEW           DROP TEXT SEARCH TEMPLATE        REASSIGN OWNED                   TRUNCATE
  ALTER FUNCTION                   ALTER TABLE                      CREATE ACCESS METHOD             CREATE PUBLICATION               DEALLOCATE                       DROP OPERATOR                    DROP TRANSFORM                   REFRESH MATERIALIZED VIEW        UNLISTEN
  ALTER GROUP                      ALTER TABLESPACE                 CREATE AGGREGATE                 CREATE ROLE                      DECLARE                          DROP OPERATOR CLASS              DROP TRIGGER                     REINDEX                          UPDATE
  ALTER INDEX                      ALTER TEXT SEARCH CONFIGURATION  CREATE CAST                      CREATE RULE                      DELETE                           DROP OPERATOR FAMILY             DROP TYPE                        RELEASE SAVEPOINT                VACUUM
  ALTER LANGUAGE                   ALTER TEXT SEARCH DICTIONARY     CREATE COLLATION                 CREATE SCHEMA                    DISCARD                          DROP OWNED                       DROP USER                        RESET                            VALUES
  ALTER LARGE OBJECT               ALTER TEXT SEARCH PARSER         CREATE CONVERSION                CREATE SEQUENCE                  DO                               DROP POLICY                      DROP USER MAPPING                REVOKE                           WITH
  ALTER MATERIALIZED VIEW          ALTER TEXT SEARCH TEMPLATE       CREATE DATABASE                  CREATE SERVER                    DROP ACCESS METHOD               DROP PROCEDURE                   DROP VIEW                        ROLLBACK
  ALTER OPERATOR                   ALTER TRIGGER                    CREATE DOMAIN                    CREATE STATISTICS                DROP AGGREGATE                   DROP PUBLICATION                 END                              ROLLBACK PREPARED
  ALTER OPERATOR CLASS             ALTER TYPE                       CREATE EVENT TRIGGER             CREATE SUBSCRIPTION              DROP CAST                        DROP ROLE                        EXECUTE                          ROLLBACK TO SAVEPOINT
  ALTER OPERATOR FAMILY            ALTER USER                       CREATE EXTENSION                 CREATE TABLE                     DROP COLLATION                   DROP ROUTINE                     EXPLAIN                          SAVEPOINT
  ALTER POLICY                     ALTER USER MAPPING               CREATE FOREIGN DATA WRAPPER      CREATE TABLE AS                  DROP CONVERSION                  DROP RULE                        FETCH                            SECURITY LABEL

\h [SQL コマンド名] <- 詳細を見る
試行錯誤編
ログイン

真面目に書くと、ログインできない。。。


psql -h localhost -p 5432 -U postgres
psql: エラー: サーバに接続できませんでした: FATAL:  Ident authentication failed for user "postgres"
Posted by muchag | PostgreSQL |
初回投稿:2019-11-17 (日) 21:30:18 | 最終更新:2020-08-10 (月) 14:46:24

MySQL

Posted by muchag | Java,MySQL |
初回投稿:2019-11-05 (火) 22:15:47 | 最終更新:2019-11-06 (水) 19:36:04


GitHub:nkjmlab/nkjmlab-utils-jpdatum

【環境】
MySQL: 8.0.18
Eclipse:Pleiades All in One JAVA 2019-09 R (4.13.0)
Java: 1.8.0_221
ドライバ
入手先
MySQL 公式

あちこちの記事で、ドライバの入手先として
公式:MySQL Community Downloads Connector/J
を挙げていたけど、どうやって DL してよいのかわからなかった。

同ページに、Recommended Windows Download: と書いてあるから
MySQL インストールディレクトリに同梱されているのかと思ったけど
エクスプローラで、mysql-connector-java で検索してみたものの、ヒットせず。

Maven Repository

仕方がないので
Maven Repository:MySQL Connector/J 8.0.18
こちらの、Files:jar (2.2MB) から DL した。

2019-11-05 現在
mysql-connector-java-8.0.18.jar

配置&参照
[project]\WebContent\WEB-INF\lib\mysql-connector-java-8.0.18.jar

として配置。

ビルド・パス の設定。

接続

数多くサンプルがある中、下記が見やすかったので
不要な部分を削除して、そのままいただきました。
TASK NOTES:JavaでMySQLに接続してデータ操作をする(2015-04-14)


import java.sql.*;

public class MySQLConnector {
    public static void main(String[] args) {
        Connection con = null;
        try {
            // MySQLに接続
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
            System.out.println("MySQLに接続できました。");
        } catch (SQLException e) {
            System.out.println("MySQLに接続できませんでした。");
        } finally {
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    System.out.println("MySQLのクローズに失敗しました。");
                }
            }
        }
    }
}
取得

Statement stm = con.createStatement();
String sql = "select * from programing";
ResultSet rs = stm.executeQuery(sql);

while(rs.next()){
    int id = rs.getInt("id");
    String name = rs.getString("name");
    System.out.println("取得結果 -> " + id + ":" + name);
}
更新

Statement stm = con.createStatement();
String sql = "insert into programing values(4, 'Python'), (5, 'Go')";
int result = stm.executeUpdate(sql);
System.out.println("更新件数は" + result + "です。");
参考サイト

TASK NOTES:JavaでMySQLに接続してデータ操作をする(2015-04-14)
→とても見やすく、コードは、ほぼそのまま真似させていただきました。

Posted by muchag | Java,MySQL |
初回投稿:2019-11-05 (火) 22:15:47 | 最終更新:2019-11-06 (水) 19:36:04

インストール -> 8.0.15

Posted by muchag | CentOS,MySQL,VirtualBox |
初回投稿:2019-02-26 (火) 22:09:16 | 最終更新:2019-03-09 (土) 17:00:59

【環境】
MySQL: 8.0.15
CentOS: 7.6.1810
VirtualBox グラフィカルユーザーインターフェース: 5.1.24 r117012 (Qt5.6.2)
リポジトリ
取得

rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

noarch の前の数値が、前回の 1 から 2 へ増えている。
気になるけど、次回!

確認

yum repolist all | grep mysql
インストール

yum install -y mysql-community-server
起動と停止

// 起動
systemctl start mysqld.service

// 停止
systemctl stop mysqld.service

// 自動起動
systemctl enable mysqld.service
systemctl list-unit-files -t service | grep mysqld
mysqld.service                                enabled
mysqld@.service                               disabled
初期パスワード
確認

cat /var/log/mysqld.log | grep "A temporary password"
2019-03-09T05:40:56.206659Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: hogehoge
変更
ログイン

mysql -uroot -p -hlocalhost
Enter password:

上記初期パスワードを入力。

変更

今回は、my.cnf で設定しただけではダメで
下記処理が必要だった。

パスワード変更
まで面倒なことをしなくても


ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass';

こちらでうまくいった。


use mysql;
select user, host, plugin from user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
タイムゾーン

タイムゾーン

設定

my.cnf 8.0.x

参考サイト

Qiita:CentOS7にMySQL8.0をインストール(2019-02-17)

試行錯誤
起動しない
原因想像

インストール直後に例の「初期パスワードを調べなきゃ」と思ってやり方を探していた際
Qiita:MySQL 8.0 初期設定覚書(2019-02-07)
を見つけた。

初期パスワードを調べなくてよい方法が書かれているようだったので
ロクに調べもせずに、盲従して


mysqld  --initialize-insecure
mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

となり、参考サイトとは異なる道順となってしまった。

あれ?と思い、


systemctl  enable  mysqld
systemctl  start   mysqld
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

と起動してみたところ、エラーとなった。


systemctl  status   mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 水 2019-02-27 00:57:05 JST; 16s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 15500 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=1/FAILURE)
  Process: 15483 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 15500 (code=exited, status=1/FAILURE)
   Status: "SERVER_BOOTING"
    Error: 2 (そのようなファイルやディレクトリはありません)

 2月 27 00:57:05 localhost.localdomain systemd[1]: Starting MySQL Server...
 2月 27 00:57:05 localhost.localdomain systemd[1]: mysqld.service: main process exited, code=exited, status=1/FAILURE
 2月 27 00:57:05 localhost.localdomain systemd[1]: Failed to start MySQL Server.
 2月 27 00:57:05 localhost.localdomain systemd[1]: Unit mysqld.service entered failed state.
 2月 27 00:57:05 localhost.localdomain systemd[1]: mysqld.service failed.
初期パスワード確認

ちなみにこのタイミングで初期パスワードを確認してみたら


grep -i password /var/log/mysqld.log
2019-02-26T15:54:54.194358Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

となった。

エラー

ログを確認してみたところ


vi /var/log/mysqld.log

2019-02-26T15:57:05.414331Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable

となっていたので

権限確認

当該ファイルの場所を探し


find / -name 'ibdata1'
/var/lib/mysql/ibdata1

当該ファイルの権限を確認してみたら


ll /var/lib/mysql

ほとんどの権限者が root になっていた。

他の仮想マシンを参照したところ
全ての権限者が mysql になっていた。

あちゃー。。。

再インストール

rm -rf /var/lib/mysql/*
yum remove mysql-community-server
yum install -y mysql-community-server

この時点では


ll /var/lib/mysql
合計 0

続いて


systemctl status mysqld.service
systemctl start mysqld.service

こうしたら


ll /var/lib/mysql
合計 168000
drwxr-x--- 2 mysql mysql      187  3月  9 14:41 #innodb_temp
-rw-r----- 1 mysql mysql       56  3月  9 14:40 auto.cnf
-rw-r----- 1 mysql mysql      155  3月  9 14:41 binlog.000001
-rw-r----- 1 mysql mysql       16  3月  9 14:41 binlog.index
-rw------- 1 mysql mysql     1680  3月  9 14:40 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112  3月  9 14:40 ca.pem
-rw-r--r-- 1 mysql mysql     1112  3月  9 14:40 client-cert.pem
-rw------- 1 mysql mysql     1680  3月  9 14:40 client-key.pem
-rw-r----- 1 mysql mysql     5748  3月  9 14:40 ib_buffer_pool
-rw-r----- 1 mysql mysql 50331648  3月  9 14:41 ib_logfile0
-rw-r----- 1 mysql mysql 50331648  3月  9 14:40 ib_logfile1
-rw-r----- 1 mysql mysql 12582912  3月  9 14:41 ibdata1
-rw-r----- 1 mysql mysql 12582912  3月  9 14:41 ibtmp1
drwxr-x--- 2 mysql mysql      143  3月  9 14:40 mysql
-rw-r----- 1 mysql mysql 25165824  3月  9 14:41 mysql.ibd
srwxrwxrwx 1 mysql mysql        0  3月  9 14:41 mysql.sock
-rw------- 1 mysql mysql        6  3月  9 14:41 mysql.sock.lock
drwxr-x--- 2 mysql mysql     4096  3月  9 14:40 performance_schema
-rw------- 1 mysql mysql     1680  3月  9 14:40 private_key.pem
-rw-r--r-- 1 mysql mysql      452  3月  9 14:40 public_key.pem
-rw-r--r-- 1 mysql mysql     1112  3月  9 14:40 server-cert.pem
-rw------- 1 mysql mysql     1680  3月  9 14:40 server-key.pem
drwxr-x--- 2 mysql mysql       28  3月  9 14:40 sys
-rw-r----- 1 mysql mysql 10485760  3月  9 14:41 undo_001
-rw-r----- 1 mysql mysql 10485760  3月  9 14:41 undo_002

無事に権限者が mysql になった。

前回は何だったのかしらね。。。

Posted by muchag | CentOS,MySQL,VirtualBox |
初回投稿:2019-02-26 (火) 22:09:16 | 最終更新:2019-03-09 (土) 17:00:59

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column …

Posted by muchag | MySQL |
初回投稿:2018-05-19 (土) 19:09:04 | 最終更新:2018-05-19 (土) 19:16:18

【環境】
MySQL: 5.7.18
経緯

GROUP BY を用いたら、下記エラーが出た。

Error: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘dbnam.tablename.columnname’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因

Google 先生に質問すると、一杯出てきた。。。
MySQL 5.7 から仕様変更になったのが原因だそうな。

sql_mode=only_full_group_by
この部分。

my.cnf のデフォルトで sql_mode に only_full_group_by が追加されたため
GROUP BY を用いたときは、一意である値しか SELECT できなくなったとのこと。

解決策1

my.cnf の sql_mode から only_full_group_by を外してしまえば、5.6 までと同じように動作するとのこと。

解決策2
  • GROUP BY で指定したカラム
  • 集約関数を利用しているカラム
  • 全て同値であるカラム(?)

これらについては、SELECT できるので
それだけを指定する。

参考サイト

Qiita:脱!ゆるふわMySQL(2015-12-16)

Posted by muchag | MySQL |
初回投稿:2018-05-19 (土) 19:09:04 | 最終更新:2018-05-19 (土) 19:16:18

CSV から null をロード

Posted by muchag | MySQL,phpMyAdmin |
初回投稿:2018-04-28 (土) 10:01:31 | 最終更新:2018-04-28 (土) 10:17:08

【環境】
MySQL: 5.7.18
phpMyAdmin: 4.7.6
経緯
phpMyAdmin

CSV からデータをロードしようとしたら

エラー
#1292 – Incorrect datetime value: ‘null’ for column ‘hoge’ at row 1

というエラーが出た。

CSV の中身を見ると、当該カラムの値は “null” となっている。

CLI

MySQL の CLI から入れようとしたら Warning が出た。

気持ち悪いので、なんとかしてみようと思った。

データ型

ちなみに対象カラムのデータ型は DATETIME。

手法1

LOAD DATA LOCAL INFILE '/path/to/csv_file.csv' INTO TABLE hoge FIELDS TERMINATED BY ',' ENCLOSED BY '"' SET deleted = nullif(deleted, '0000-00-00 00:00:00');

どこで見たか忘れてしまったけど
こういうやり方があるらしい。

以前試したときは上手くいった。

複数カラム対象

ただ今回は、複数カラムが対象で


LOAD DATA LOCAL INFILE '/path/to/csv_file.csv' INTO TABLE hoge FIELDS TERMINATED BY ',' ENCLOSED BY '"' SET registered = nullif(deleted, '0000-00-00 00:00:00'), deleted = nullif(deleted, '0000-00-00 00:00:00');

このように書いてみたけど、上手く行かなかった。

その後

すぐ諦めたので、何が悪いのか、そもそもこの書き方が正しいのかすら不明。

手法2

null のカラムの CSV 値を “\N” とする手法。

これもどこかに書いてあったのを見かけた記憶があったので試してみたところ、
なんと、上手くいった♪

Excel のセルに \N とそのまま記述して
CSV では、”\N” となるように吐き出したところ
OK だった。

Posted by muchag | MySQL,phpMyAdmin |
初回投稿:2018-04-28 (土) 10:01:31 | 最終更新:2018-04-28 (土) 10:17:08

タイムゾーン

Posted by muchag | MySQL |
初回投稿:2017-12-10 (日) 23:47:19 | 最終更新:2019-11-05 (火) 20:09:44

【環境】
MySQL: 5.7.18
-> 8.0.18
経緯

CakePHP3 を利用しているときに、下記エラーが出た。

SQLSTATE[HY000]: General error: 1298 Unknown or incorrect time zone: ‘Asia/Tokyo’

調べてみると、MySQL のタイムゾーン設定がなされていないとのこと。

mysql データベースを見ると、確かに空っぽだった。


select * from mysql.time_zone;
Empty set (0.00 sec)
手順
Linux 環境
コマンド

mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root mysql -p
Enter password:
Warning: Unable to load '/usr/share/zoneinfo//iso3166.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo//zone1970.tab' as time zone. Skipping it.
結果

3つ位失敗したみたいだけど、無事にタイムゾーンが mysql データベース time zone name テーブルへ登録された♪


select * from mysql.time_zone;
+--------------+------------------+
| Time_zone_id | Use_leap_seconds |
+--------------+------------------+
|            1 | N                |
|            2 | N                |
|            3 | N                |

            __ snip __

|         1778 | Y                |
|         1779 | Y                |
|         1780 | Y                |
+--------------+------------------+
1780 rows in set (0.00 sec)
Windows 環境
SQL 入手

MySQL Community Downloads Time zone description tables
から、MySQL 5.7+ 用の timezone_2019c_posix_sql.zip を DL。

SQL 実行

上記ファイルを解凍して出てきたファイルを、C ドライブ直下へ配置して実行。


mysql -u root -p mysql < c:\timezone_posix.sql
確認
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

を更新してから


show variables like '%time_zone';
+------------------+------------+
| Variable_name    | Value      |
+------------------+------------+
| system_time_zone |            |
| time_zone        | Asia/Tokyo |
+------------------+------------+
2 rows in set, 1 warning (0.01 sec)
参考サイト

有限会社 エス技研:MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も(2017-06-16)
→Linux 環境について、参考にさせていただきました

Pentec:MariaDB (MySQL) のタイムゾーン、タイムゾーンテーブルを設定する
→Windows 環境について、参考にさせていただきました

Posted by muchag | MySQL |
初回投稿:2017-12-10 (日) 23:47:19 | 最終更新:2019-11-05 (火) 20:09:44

インストール

Posted by muchag | phpMyAdmin |
初回投稿:2017-12-10 (日) 11:39:12 | 最終更新:2019-11-23 (土) 21:17:58

いつも大変お世話になっている phpMyAdmin。
この度、初めてインストール作業を行うことになりました。

公式:Bringing MySQL to the web

【環境】
phpMyAdmin: 4.7.6
DL

上記公式サイト右上の [Douwload 4.7.6] をクリックすると DL できる。

2017-12-10 現在
phpMyAdmin-4.7.6-all-languages.zip

ダウンロードページ

または、ダウンロードページ から、詳細な選択をすることも可能。

配置

DL した .zip ファイルを解凍して、任意のディレクトリへ配置。

今回は、アプリケーションディレクトリ直下へ配置した。

また、ディレクトリ名が長いので
phpMyAdmin-4.7.6-all-languages → pma とリネームした。

ログイン

Cookie を有効にしておかないと、ログインできない。

設定

必須ではない。

設定ファイルの配置
/pma/config.sample.inc.php

をコピーリネームして

/pma/config.inc.php

を配置。

デフォルト設定
/pma/libraries/config.default.php

これがデフォルトの設定らしい。

パスフレーズ

今回はローカル環境なので、適当に。


$cfg['blowfish_secret'] = 'hoge'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
大問題!

上記設定をしたら、pma 側で下記エラーが出だ。

phpMyAdmin – エラー
設定ファイルのパーミッションが正しくありません。誰でも書き込み可能になっています!

現在の VirtualBox を利用した仮想環境においては
config.inc.php に、パーミッションを設定できないので
こうなるらしい。

config.inc.php を削除しました。。。

ここまで

その他の config.inc.php については
ko-iya528:phpMyAdminのインストール(2017-10-26)

テーマ

phpMyAdmin は、テーマの概念があり
テーマを変更することで外観を変更することができる。

意義

テスト環境と本番環境において
取り違えによる大事故を起こさないためにも
テーマは設定しておこうね!

策定

色々とあるのかもしれないけど
公式:Themes
で、配布しているので、こちらから頂戴する。

今回は、4.7.6 なので、4.7 の中から選択。

4種類ある中から、Metro 2.6 にした。

DL

metro-2.6.zip というリンクから DL。

配置

DL してきた .zip ファイルを解凍して
出てきた metro ディレクトリをそのまま

/pma/themes

へ配置。

設定
pma

ホームページ
「外観の設定」
Theme:[metro] を選択

Metro のテーマ
/metro/layout.inc.php

にて、Metro テーマのテーマを選択できる。(ややこしいw)


/* Theme color scheme
 * Values: "teal", "redmond", "blueeyes", "mono", "win"
 * Set this value for the desired color scheme
 */

$scheme                                     = "win";
カスタマイズ
/metro/layout.inc.php

に、色設定があるので、そちらをカスタマイズ。
テーマカラー


case "win":

    $GLOBALS['cfg']['NaviColor']                = '#EEEEEE';
    $GLOBALS['cfg']['NaviBackground']           = '#377796';	// ページ上部ナビゲーションバーの背景色
    $GLOBALS['cfg']['NaviBackgroundLight']      = '#428EB4';
    $GLOBALS['cfg']['NaviPointerColor']         = '#333333';
    $GLOBALS['cfg']['NaviPointerBackground']    = '#377796';
    $GLOBALS['cfg']['NaviDatabaseNameColor']    = '#333333';
    $GLOBALS['cfg']['NaviHoverBackground']      = '#428EB4';
    $GLOBALS['cfg']['MainColor']                = '#444444';
    $GLOBALS['cfg']['MainBackground']           = '#FFFFFF';
    $GLOBALS['cfg']['BrowsePointerColor']       = '#377796';
    $GLOBALS['cfg']['BrowseMarkerColor']        = '#000000';
    $GLOBALS['cfg']['BrowseWarningColor']       = '#D44A26';
    $GLOBALS['cfg']['BrowseSuccessColor']       = '#01A31C';
    $GLOBALS['cfg']['BrowseGrayColor']          = '#CCCCCC';
    $GLOBALS['cfg']['BrowseMarkerBackground']   = '#EEEEEE';
    $GLOBALS['cfg']['BorderColor']              = '#DDDDDD';
    $GLOBALS['cfg']['ButtonColor']              = '#FFFFFF';
    $GLOBALS['cfg']['ButtonBackground']         = '#377796';
    $GLOBALS['cfg']['ButtonHover']              = '#428EB4';
    $GLOBALS['cfg']['ThBackground']             = '#F7F7F7';
    $GLOBALS['cfg']['ThDisabledBackground']     = '#F3F3F3';
    $GLOBALS['cfg']['ThColor']                  = '#666666';
    $GLOBALS['cfg']['ThPointerColor']           = '#000000';
    $GLOBALS['cfg']['BgOne']                    = '#F7F7F7';
    $GLOBALS['cfg']['BgTwo']                    = '#FFFFFF';
    $GLOBALS['cfg']['BlueHeader']               = '#3A7EAD';	// 注意書きなどの背景色
    break;
Posted by muchag | phpMyAdmin |
初回投稿:2017-12-10 (日) 11:39:12 | 最終更新:2019-11-23 (土) 21:17:58

ERROR 1452 (23000): Cannot add or update a child row: …

Posted by muchag | MySQL |
初回投稿:2016-01-19 (火) 13:58:54 | 最終更新:2016-01-19 (火) 14:05:18

【環境】
MySQL:5.5.27
状況

とあるテーブルに CSV データを入れ込もうとして下記エラーが出た。

エラー
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`database`.`table_b`, CONSTRAINT `[constraint_name]` FOREIGN KEY (`table_a_id`) REFERENCES `table_a` (`id`) ON DELETE CASCADE)

このエラーは外部キー制約に違反したデータを保持した状態で
当該テーブルを更新しようとすると出るとのこと。

原因

親テーブル(table_a)の取り込み時に、2行欠落していた。

解決

親テーブル(table_a)を取り込み直して解決。
かなすぃ。 XO

調査過程

あ~、またやってしまったと思い、
あれこれデータを調べてみたけど、不整合を見つけることができなかった。

検索

親テーブル(table_a)の ID は、1~365。
子テーブル(table_b)の table_a_id カラムに入っている値を
phpMyAdmin で検索して、1 より小さいもの、365 より大きいものを見てみたけど
検索結果は 0。

データ件数

ふと気になって、table_a のデータ件数を見てみたら
なんと! 364件。
あり? と思って、データを追ってみたら
ID:358 がない。。。

ログ

改めて、LAOD DATA LOCAL INFILE のログを見てみたら、あらら。。。

  1. Query OK, 363 rows affected (0.05 sec)
  2. Records: 365  Deleted: 0  Skipped: 2  Warnings: 0

じぇんじぇん見てなかったじぇ。。。
これを確認していれば、無駄な時間を取られずにすんだのに~。

Skipped: 2 なのに、364件あったのは。。。
い、今は気が付かなかったことにしましょ。。。

Posted by muchag | MySQL |
初回投稿:2016-01-19 (火) 13:58:54 | 最終更新:2016-01-19 (火) 14:05:18
次ページへ »