20211007のMySQLに関する記事は6件です。

Raspberry Pi 3+の設定(忘備録)その4 MySQL(mariaDB)インストール

今までRaspberry Pi 3+に16GBのmicroSDを挿してwebサーバとして運用していましたが、手狭になってきたので64GBに改めて環境構築をした時の自分の作業の忘備録です。以前導入した時とだいぶ変わっている部分が多かったので驚いたのが第一印象でした。 前提 このラズベリーパイは外部に公開はしません。(twitterへのポストはします) 普段、このRaspberry Pi 3+は午前7時から午後11時まで30分毎にcronでbotを運用しています。 そのため一日当たりの作業時間は夜間の23時から0時までの1時間ぐらいをメンテナンス時間として作業を行う予定です。 またこういう世界から遠ざかって久しいのでいろいろと拙い部分があると思います。ご指摘ください。 関連ページ https://qiita.com/cafe-capitola/items/b5e3e5dfdc8ca9f9a744 https://qiita.com/cafe-capitola/items/283f41793cde409a36a6 https://qiita.com/cafe-capitola/items/d167b4e96fa78dc8878c https://qiita.com/cafe-capitola/items/97dd713185049d4a8274 https://qiita.com/cafe-capitola/items/9f97c791a598420a7e57 MySQL(MariaDB)インストール 今回、今までと同じようにphpmyadminを入れようと思ったのですが、インストールしてもユーザー周りがうまくいかずに困ったので、運用はとりあえず全部SQLコマンドを叩いて実行することにしようと思います。 参考にしたサイトはこちら。 https://naokeyzmt.com/rogue/skillup-raspberrypi-lamp/ MySQLを入れようとすると、なんだか「無い」と怒られるのでmariaDBをインストールしました。 $ sudo apt install mariadb-server mariadbインストール後、設定を行っていきたいと思います。 次にこちら。 $ sudo /usr/bin/mysql_secure_installation $ sudo systemctl start mariadb.service 設定することは以下の点 rootのパスワード設定 → 設定する 匿名ユーザーの有無 → いらない リモートログインの有無 → 今回はコマンドラインで実行するので使うかもしれない testデータベースの有無 → いらない 設定の反映 → やる ここまでやって、ログインできるか確認します。まずは何もオプションなし。 $sudo mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 36 Server version: 10.3.29-MariaDB-0+deb10u1 Raspbian 10 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. 何もなしで入れると思います。それではユーザーを手動で作成していこうと思います。 # ユーザー追加 create user `任意のユーザー名`@`localhost` IDENTIFIED BY '任意のパスワード'; # 追加したユーザーに権限を付加。mysql8以降では書式が変わったそうです。 GRANT ALL PRIVILEGES ON *.* TO `任意のユーザー名`@'localhost' WITH GRANT OPTION; # 反映 FLUSH PRIVILEGES; ここまでやって、追加したユーザーが見えるか確認したいと思います。 MariaDB [(none)]> SELECT Host, User, Password FROM mysql.user; +-----------+-------------+-------------------------------------------+ | Host | User | Password | +-----------+-------------+-------------------------------------------+ | localhost | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx| | localhost | hoge-hoge | *yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy| +-----------+-------------+-------------------------------------------+ パスワードには暗号化された値が入っています。 次に、先ほど指定したユーザーでログインできるか確認してみたいと思います。 $ sudo mysql --host=localhost --user=hoge-hoge --password=xxxxxxxxxxxxxxxxxxxxxx こっちでも行けます。 $ sudo mysql -uhoge-hoge -p Enter password: ここまで行ければ、あとはコマンドラインで何とかなると思います。と、思いましたが…。 PDOでMySQLにつながらない(解決済み) まずは、PDOのドライバーが必要なのでインストール $ sudo apt-get -y install php-mysql さらにphp.iniのmysqlやpdoと書いてある行のコメントアウトをかたっぱしから外していきます。 phpinfoにも PDO drivers mysql の記載があることを確認。 https://kahoo.blog/php-pdo-check-mysql-connection-code/ こちらのソースコードを参考にrootによる接続確認をしてみる。 <?php // defineの値は環境によって変えてください。 define('HOSTNAME', 'localhost'); define('DATABASE', 'hoge_data'); define('USERNAME', 'root'); define('PASSWORD', 'root-hoge'); try { /// DB接続を試みる $db = new PDO('mysql:host=' . HOSTNAME . ';dbname=' . DATABASE, USERNAME, PASSWORD); $msg = "MySQL への接続確認が取れました。"; } catch (PDOException $e) { $isConnect = false; $msg = "MySQL への接続に失敗しました。<br>(" . $e->getMessage() . ")"; } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>MySQL接続確認</title> </head> <body> <h1>MySQL接続確認</h1> <p><?php echo $msg; ?></p> </body> </html> MySQL接続確認 MySQL への接続に失敗しました。 (SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost') rootでつながりません。 MySQL5.7ではsudo権限でないとrootに接続出来ないとの事。上記で作成した別アカウントで再度接続を試みます。 ...つながりました!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

既にあるMySQLサーバに対してphpMyAdminでDockerでお手軽につなぎたい

MySQLサーバが動いていて、ちょっとphpMyAdminで繋ぎたかったです。 具体的にはRDSでMySQLが稼働中で、phpMyAdminのアドバイザー(チューニングのアドバイスを行ってくれる機能)を使いたかったのですが、通常phpMyAdminを入れるにはPHPが動くWebサーバを建てる必要があります。 EC2などでインスタンスを立てたりする必要があるのですが、閉じ忘れだったり、不用意にアクセスされたりするためお手軽に使えないか、と思いました。 結論からするととても簡単でした。 phpMyAdmin公式のDockerイメージを起動するだけでOKです。 起動時に接続先ホストを与えるのでそちらを事前に用意しておきます。 $ export PMA_HOST=mysql.example.com $ docker run --name myadmin -d -e PMA_HOST=mysql.example.com -p 8080:80 phpmyadmin 起動が完了したら http://localhost:8080 にアクセスするとphpMyAdminが開きます。後は通常の認証でOKです。(ただし外部からの接続が許可されたユーザーのみです) 終了はDockerコンテナを落とせばOKです。 $ docker down myadmin && docker kill myadmin
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLのコマンド

MySQLの起動・停止 MySQLのバージョン確認 $ mysql --version サーバーを起動 $ mysql.server start サーバーを停止 $ mysql.server stop MySQLに接続 テーブルとユーザを指定して接続(パスワードなし) mysql -u ユーザ名 テーブルとユーザを指定して接続(パスワードあり) mysql -u ユーザ名 -p 接続解除 exit データベース データベース一覧 show databases; データベース選択 use データベース名 テーブル テーブル一覧の表示 show tables; テーブル構造の表示 desc テーブル名; テーブルのオーナーの変更 alter table テーブル名 owner to オーナー名; ユーザー ユーザー一覧(すべての項目) SELECT * FROM mysql.user; ユーザー一覧(ユーザー名、ホスト名のみ) SELECT User,Host FROM mysql.user;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

expressとmysqlを使ったDBにbcryptでハッシュ化したデータを挿入する

全体のコードです。 sqlでinsertしているpasswordをハッシュ化してから、DBに保存している。 //モジュールをインストール const { request } = require('express') const express = require('express') const app = express() const port = 5000 const bcrypt = require('bcrypt') //saltRoundsを使って何回ハッシュ化を行うのか設定 const saltRounds = 10 const mysql = require('mysql'); //DBに接続 const con = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'express_db' }) //データを挿入するSQL文 const insert = 'INSERT INTO USERS (name, email, password) value (?,?,?)' // bcrypt.hash("password", saltRounds, (err, hash) => { //DB操作 con.query(insert,["johndoe","john@example.com",hash],function(err, result, fields){ if (err) throw err; //結果をログで表示する console.log(result); }) }) app.get('/',(request, response) => response.send('hello')) app.listen(port, () => console.log(`example app listening on port ${port}!`))
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

KubernetesでMySQL Serverを立ててみた

今回は完全に個人メモで〜す。本来はGCPのCloud Loggingを使うんですが、直近で使えるデータベースが1つしかないので、機能テスト(Jobの機能テスト)の自動実行向けにKubernetes上にMySQLを立ててみた。自動テスト向けのDBなので、Pod再作成などによってテーブルやデータが消えても問題ない(→テーブル作成やテストデータ登録は自動テスト実施のタイミングで行うため)。  マニフェストファイルを作る 用意したマニフェストファイルは以下の通り。 apiVersion: v1 kind: Service metadata: name: mysql-server spec: type: ClusterIP ports: - name: mysql port: 3306 targetPort: 3306 protocol: TCP selector: app: mysql-server --- apiVersion: apps/v1 kind: Deployment metadata: name: mysql-server spec: selector: matchLabels: app: mysql-server strategy: type: Recreate template: metadata: labels: app: mysql-server spec: containers: - image: mysql:5.7 name: mysql resources: env: - name: MYSQL_USER value: devuser - name: MYSQL_PASSWORD value: devuser - name: MYSQL_ROOT_PASSWORD value: password - name: LANG value: C.UTF-8 ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-server-initdb mountPath: /docker-entrypoint-initdb.d - name: mysql-server-conf mountPath: /etc/mysql/conf.d volumes: - name: mysql-server-initdb configMap: name: mysql-server-initdb-config - name: mysql-server-conf configMap: name: mysql-server-conf-config --- apiVersion: v1 kind: ConfigMap metadata: name: mysql-server-initdb-config data: createdb.sql: | CREATE DATABASE job1; CREATE DATABASE job2; GRANT ALL ON job1.* TO devuser; GRANT ALL ON job2.* TO devuser; --- apiVersion: v1 kind: ConfigMap metadata: name: mysql-server-conf-config data: custom.cnf: | [mysqld] character-set-server=utf8 軽く説明を残しておく Deployment PodでMySQLを起動する。 apiVersion: apps/v1 kind: Deployment metadata: name: mysql-server spec: selector: matchLabels: app: mysql-server strategy: type: Recreate template: metadata: labels: app: mysql-server spec: containers: - image: mysql:5.7 name: mysql resources: env: - name: MYSQL_USER value: devuser - name: MYSQL_PASSWORD value: devuser - name: MYSQL_ROOT_PASSWORD value: password - name: LANG value: C.UTF-8 ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-server-initdb mountPath: /docker-entrypoint-initdb.d - name: mysql-server-conf mountPath: /etc/mysql/conf.d volumes: - name: mysql-server-initdb configMap: name: mysql-server-initdb-config - name: mysql-server-conf configMap: name: mysql-server-conf-config ConfigMap データベースを初期化するためのSQLを用意 以下で指定したSQLは/docker-entrypoint-initdb.d/createdb.sqlに保存され、データベース初期化時に実行される。 apiVersion: v1 kind: ConfigMap metadata: name: mysql-server-initdb-config data: createdb.sql: | CREATE DATABASE job1; CREATE DATABASE job2; GRANT ALL ON job1.* TO devuser; GRANT ALL ON job2.* TO devuser; MySQLの動作をカスタマイズする設定ファイルを用意 /etc/mysql/conf.d/custom.cnfに保存され、データベース起動時に読み込まれる。 apiVersion: v1 kind: ConfigMap metadata: name: mysql-server-conf-config data: custom.cnf: | [mysqld] character-set-server=utf8 Service 他のPodからアクセスできるようにするためにServiceを作っておく。 apiVersion: v1 kind: Service metadata: name: mysql-server spec: type: ClusterIP ports: - name: mysql port: 3306 targetPort: 3306 protocol: TCP selector: app: mysql-server 適用してみる 用意したマニフェストファイルを適用する。 $ kubectl apply -f mysql-server.yaml service/mysql-server created deployment.apps/mysql-server created configmap/mysql-server-initdb-config created configmap/mysql-server-conf-config created 起動確認してみる。 $ kubectl get pod,svc NAME READY STATUS RESTARTS AGE pod/mysql-server-76f4b79f55-f2rqp 1/1 Running 0 55s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d5h service/mysql-server ClusterIP 10.104.183.144 <none> 3306/TCP 55s データベースにログインしてみる(Podの中から) $ kubectl exec -it $(kubectl get pod | grep mysql | cut -d " " -f 1) -c mysql -- mysql --user=devuser --password=devuser mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.7.35 MySQL Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. 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> DBが作られているか確認してみる。 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | job1 | | job2 | +--------------------+ 3 rows in set (0.01 sec) 設定内容が取り込まれているか確認してみる。 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/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) データベースにログインしてみる(クラスタの外部から) いったんport-forwardを使ってクラスタの外からアクセスしてみる。 $ kubectl port-forward service/mysql-server 3306:3306 Forwarding from 127.0.0.1:3306 -> 3306 Forwarding from [::1]:3306 -> 3306 別ターミナルを上げてクラスタの外からmysqlコマンドを使ってアクセスしてみる。 $ mysql --host=127.0.0.1 --user=devuser --password=devuser Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.7.35 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | job1 | | job2 | +--------------------+ 3 rows in set (0.00 sec) MySQL [(none)]>
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL 8.0.25 インストール後からユーザー作成まで

はじめに 本記事では、MySQLをインストールしてユーザーを作成するまでの手順を述べます。 ※ MySQLのインストール方法は載せてないので、ご了承ください。 環境 macOS Big Sur バージョン 11.6 MySQL 8.0.25 補足 MySQLのバージョンはサーバーを起動する前に、以下のコマンドで確認できます。 $ mysql --version 解説 それでは、ユーザー作成の手順を述べます。 まず、サーバーを起動します。 $ mysql.server start SUCCESS!が表示されたら、rootユーザーでログインします。 mysql> mysql -u root -p パスワードを聞かれるので、入力します。 Enter password: これでrootユーザーでログインできました。 createコマンドでユーザーを作成していきます。 今回、ホストはlocalhostで設定しています。 mysql> create user `ユーザー名`@`localhost` IDENTIFIED BY 'パスワード'; 正しく追加できていれば、以下のコマンドで追加したユーザーが表示されます。 mysql> SELECT Host, User FROM mysql.user; ユーザーを作成しただけでは、データベースのアクセス権限がないので付与してあげる。 mysql> GRANT ALL ON データベース名.* TO 'ユーザー名'@'localhost'; これで権限の付与が完了です。 以下のコマンドで権限を確認できます。 mysql> show grants for 'ユーザー名'@'localhost'; おわりに MySQLをインストールしてから、ユーザーを作成するまでの手順を記載しました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む