20210501のMySQLに関する記事は7件です。

[MySQL]カラムのデータ型を変更

データ型を変更する方法をよく忘れてしまうので、メモとして残します。 テストテーブル mysql> DESC employee; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | code | varchar(45) | NO | UNI | NULL | | | name | varchar(45) | YES | | NULL | | | age | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ codeカラムのデータ型をintに変更 mysql> ALTER TABLE employee MODIFY code int NOT NULL; mysql> ALTER TABLE employee MODIFY code int; ## NOT NULL制約を外したりすることも可能
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-compose で mysql コンテナを python コンテナで実行させてみた

はじめに docker で mysql と python のコンテナを別々に立ち上げてから python コンテナを mysql につなげて実行する記事はよくありますが docker-compose でコンテナの起動を一気にやってしまう記事はなかなか見つからなかったので上げました。 この記事で行うこと docker-compose で mysql と python3 のコンテナの起動 python3 のコンテナの起動後、mysql に接続してテーブルを作成&確認 環境 ubuntu 18.04 を使用 docker と docker-compose をインストール済であること ファイル構成 /srv/docker/mysql/ ├── docker-compose.yml ├── db/ │ ├── data/ │   ├── Dockerfile │   ├── my.cnf ├── log/ ├── python/ │ ├──  sample.py │   └── Dockerfile └── root 手順 ディレクトリを作成します $ mkdir -p /srv/docker/mysql/db/data $ cd /srv/docker/mysql $ mkdir log $ mkdir python $ mkdir python $ mkdir root docker-compose.yml 作成 /srv/docker/mysql/ ディレクトリで docker-compose.yml を作成します。 docker-compose.yml version: '3' services: # MySQL db: image: mysql:5.7 container_name: mysql_host environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test_database MYSQL_USER: docker MYSQL_PASSWORD: docker TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./db/data:/var/lib/mysql - ./log/mysql:/var/log/mysql - ./db/my.cnf:/etc/mysql/conf.d/my.cnf ports: - 3306:3306 ## For static IP address networks: python_network: ipv4_address: 192.168.2.2 ## python3 python3: restart: always build: context: ./python container_name: "python3" working_dir: "/root/src" tty: true volumes: - ./python:/root/src links: - db networks: - python_network networks: python_network: driver: bridge ipam: driver: default config: - subnet: 192.168.2.0/24 gateway: 192.168.2.1 解説 基本は mysql と python3 を docker-composeで立ち上げる内容になってます。 networks: について python3で mysqlに接続するときに毎回 IP アドレスを聞くのが面倒なので、 "networks: " を使ってmysql のIPアドレスを固定化させています。 python3 のIPアドレスは固定させなくても大丈夫ですが、mysqlコンテナと同じネットワークで起動させないと(networks: で、mysqlと同じネットワークを指定)mysql と接続できないです。 こちらのサイトを参考にしました mysql コンテナの設定 my.cnf 編集 my.cnf [mysqld] # 文字コード、整合順序の設定 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4 user = docker password = docker Dockerfile 編集 mysql のログ取りや my.cnfを有効にする設定をします。 /srv/docker/mysql/db/Dockerfile.  FROM mysql:5.7 RUN touch /var/log/mysql/mysqld.log ADD ./db/my.cnf /etc/mysql/conf.d/my.cnf RUN chmod 644 /etc/mysql/my.cnf python3 コンテナの設定 Dockerfile 編集 mysql と接続するためのパッケージをインストールします /srv/docker/mysql/python/Dockerfile. FROM python:3.7 RUN pip install --upgrade setuptools RUN pip install mysql-connector-python mysql コンテナと接続&実行 python ファイルの作成 /srv/docker/mysql/python/sample.py import mysql.connector # connect mysql cnx = mysql.connector.connect( host='192.168.2.2', port='3306', user='docker', password='docker', database='test_database' ) cursor_=cnx.cursor()    # create new database query = " create database if not exists test_database" cursor.execute(query2) #create new table query2 = "create table if not exists test (id int, data varchar(20))" cursor.execute(query2)    #check table query3 = "SHOW TABLES" cursor.execute(query3) print(cursor.fetchall()) 解説 connect mysql について host には mysql のIPアドレスを書きます。今回はdocker-compose で固定化させたIPアドレス使用してます docker-compose でmysql のIPアドレスを固定化させていない場合、次の手順で確認します mysql コンテナのIPアドレス確認方法 $ docker-compose up -d $ docker exec -it mysql_host sh # hostname -i 192.168.2.2 実行 1. コンテナの起動 docker-compose で mysql と python3 のコンテナを起動させます $ cd /srv/docker/mysql $ docker-compose up -d ちゃんと起動できてるか確認します。 State が Up になっていればOKです $ docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------- mysql_host docker-entrypoint.sh mysql ... Up 0.0.0.0:3306->3306/tcp,:::330 6->3306/tcp, 33060/tcp python3 python3 Up State が up じゃなかったらログを確認します $ docker-compose logs 2. python3 コンテナを mysql コンテナに接続 & mysql を実行 python3 のコンテナの起動し、sample.pyを実行します sample.py で作成したテーブル名が出力されれば成功です! $ sudo docker exec -it python3 sh # python3 sample.py [('test',)]
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Ruby on Rails】途中でカラムを追加・削除する

概要 アプリ作成途中に「追加でこの情報もテーブルに保存したい!」「このカラムはいらん!」と思う時は多々ありますよね、、、 そんな時のために「カラムを追加・削除する方法」を記載しておきます!! (環境構築とモデルの作成はできている状態です) 環境 ruby 2.6.5 Rails 6.0.3.5 【カラムを追加する】 追加するカラム Usersテーブルにnameカラムを追加する ①追加するカラムのマイグレーションを生成 % rails g migration Add[カラム名]To[テーブル名][カラム名:型]  (見本) % rails g migration AddNameToUsers name:string (実行するコマンド) 以下のマイグレーションファイルが自動で作成されます。 db>migrate>〇〇〇〇〇〇_add_name_to_users.b class AddNameToUsers < ActiveRecord::Migration def change add_column :users, :name, :string end end ②追加したマイグレーションファイルをテーブルに反映 % rails db:migrate これでテーブルに新しくカラムが追加されます。 【カラムを削除する】 削除するカラム Usersテーブルのnameカラムを削除する ①削除するカラムのマイグレーションを生成 % rails g migration Remove[カラム名]To[テーブル名][カラム名:型]  (見本) % rails g migration RemoveNameToUsers name:string (実行するコマンド) 以下のマイグレーションファイルが自動で作成されます。 db>migrate>〇〇〇〇〇〇_remove_name_to_users.b class RemoveNameToUsers < ActiveRecord::Migration def change remove_column :users, :name, :string end end ②作成されたマイグレーションファイルをテーブルに反映 % rails db:migrate これでUsersテーブルのnameカラムが削除されます。 参考リンク Railsのデータベースでカラムを追加する方法 -Qiita Ruby on Rails カラムの追加と削除 -Qiita
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-compose環境でのmysql接続方法まとめ

前提 wsl2を使ったDocker環境 docker-composeでmysqlをPython flaskの環境を構築 flaskサーバからmysqlサーバに接続 wsl2のコマンドラインからmysqlを使用 docker-compose.yml version: '3' services: db: image: mysql:8.0 container_name: mysql_host ports: - "3306:3306" #<---wsl2から接続する場合に必要。flask_hostからの接続には不要 environment: MYSQL_ROOT_PASSWORD: secret volumes: - ./db/data:/var/lib/mysql - ./db/init:/docker-entrypoint-initdb.d flask: build: . container_name: flask_host ports: - "5000:5000" volumes: - .:/workspace:cached tty: true environment: TZ: Asia/Tokyo # command: flask run --host 0.0.0.0 --port 5000 $ docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------- mysql_host docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp sample1_flask_1 python3 Up 0.0.0.0:5000->5000/tcp 接続方法まとめ 接続元 記述方法 flaskサーバからmysqlに接続 mysql_hostmysqlサーバのdocker hostnameを使用 wsl2からmysqlに接続 127.0.0.1※.wslconfigに追記が必要※localhostと記述するとmysql.sockを使って接続しようとするので接続できない .wslconfig [wsl2] memory=2GB swap=2GB localhostForwarding=true memory, swapの記述は、localhost接続とは関係ありません。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】WordPressとMySQLでブログを構築しよう

構成図 それでは順に作っていきましょう! 1. AWSへログイン 2. 東京リージョンになっていることを確認 3. VPCを作成(IP:10.0.0.0/21) ■ルート コンソールで「VPC」と検索→左ペイン内の「VPC」を選択→「VPCを作成」を選択 4. サブネットを作成(IP:10.0.0.0/24, 10.0.2.0/24) ■ルート コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「サブネットを作成」を選択 Public Subnetを作成 WordPressに使うサブネットを作成します。 Private Subnetを作成 RDB(MySQL)に使うサブネットを作成します。 5. Publicサブネット内にEC2を構築 ■ルート コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「インスタンスを起動」を選択 ■ステップの流れ STEP1 Amazon Linux 2 AMI STEP2 t2.micro STEP3 「ネットワーク」、「サブネット」、「パブリックIP」を変更 STEP4 そのままでOK STEP5 Name=WEBSERVER1で設定 STEP6 セキュリティグループを変更 STEP7 キーペアの作成 6. Publicサブネットをインターネットに接続するためにInternet Gatewayを作成 ■ルート コンソールで「VPC」と検索→左ペイン内の「インターネットゲートウェイ」を選択→「インターネットゲートウェイの作成」を選択 これではVPCとアタッチできていないので、インターネットへ接続できません。 なのでアタッチさせましょう! これでアタッチしました。 7. EC2がインターネット接続するためにルートテーブルを作成 ■ルート コンソールで「VPC」と検索→左ペイン内の「サブネット」を選択→「Public-Subnet1」を選択→「ルートテーブル」を選択→「ルート」へ移動→「ルートを編集」を選択 8. SSH接続でログイン ターミナル // ①キーペアがあるところへ移動 $ cd desktop // ②キーペア発見 $ ls -l keypair.pem -rw-r--r--@ 1 ryo staff 1704 5 1 14:38 keypair.pem // ③権限を400に変更 $ chmod 400 keypair.pem // ④SSH接続 $ ssh -i keypair.pem ec2-user@(パブリックIPアドレス) __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| 9. PrivateサブネットにRDSを構築 RDSには、エンドポイント通信という機能がありました。 もし通信障害などが発生して、親のRDSが使えなくなった時子のRDSに接続してくれる機能です。 つまり、このことから異なるAZにサブネットがないとRDSは使えません。 ということで複数のサブネットにまたがる形でRDSは構築されるので、 サブネットグループというものが必要になります。 ■ルート コンソールで「RDS」と検索→左ペイン内の「サブネットグループ」を選択→「DB サブネットグループを作成」を選択 それでは次に、DBを作成していきましょう。 ■ルート コンソールで「RDS」と検索→左ペイン内の「データベース」を選択→「データベースの作成」を選択 次にRDSで作ったセキュリティグループを修正します。 ■ルート コンソールで「VPC」と検索→左ペイン内の「セキュリティグループ」を選択→「RDS-SG-1」を選択 DBは重要な情報が入っているため誰でも彼でもアクセスできると困ります。 なので、PublicサブネットのEC2(セキュリティグループ→WEB-SG-1)からしか触れないように修正します。 10. EC2にWordPressを導入 ターミナル // 権限が足りないので権限をrootに移動 $ sudo su - // EC2のパッケージを最新の状態にアップデート $ yum -y update // WordPressが動くために必要なツールをダウンロード(PHP, Apache, MySQL) $ amazon-linux-extras install php7.2 -y $ yum -y install mysql httpd php-mbstring php-xml gd php-gd // Apacheが再起動後も自動的に動くようにする $ systemctl enable httpd.service // Apacheをスタート状態に $ systemctl start httpd.service // カレントディレクトリにWordPressの最新パッケージを入れる $ wget http://ja.wordpress.org/latest-ja.tar.gz ~/ // あるか確認する $ ls -l total 16076 -rw-r--r-- 1 root root 16458939 Apr 21 00:00 latest-ja.tar.gz(あった) // 拡張子がgzなので展開しましょう $ tar zxvf ~/latest-ja.tar.gz // ディレクトリごと/var/www/htmlへコピーする $ cp -r ~/wordpress/* /var/www/html/ // /var/www/htmlをapacheのユーザーに権限変更 $ chown apache:apache -R /var/www/html 11. WordPressが開けるか確認 ■ルート コンソールで「EC2」と検索→左ペイン内の「インスタンス」を選択→「パブリックIPアドレス」をコピー パスワードは自分が決めたパスワードを入力してください。 データベースのホスト名は、RDSのエンドポイントとなります。 入れました!! 成功です!!!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-composeでMySQL簡易構築

MySQLに接続してみよう 材料 さくらVPS docker-compose MySQL公式サンプルデータベース teraterm 準備 mysql-test/ + docker-compose.yml + conf.d/ + data/ + docker-entrypoint-initdb.d/ + world.sql.gz docker-compose.yml # vim: set ts=2 et: version: '3.1' services: db: image: mysql:8.0.24 volumes: - ./data:/var/lib/mysql - ./conf.d:/etc/mysql/conf.d - ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d command: --default-authentication-plugin=mysql_native_password cap_add: - SYS_NICE ports: - "3306:3306" restart: always environment: MYSQL_ROOT_PASSWORD: my-secret-pw MYSQL_DATABASE: world MYSQL_USER: user1 MYSQL_PASSWORD: pass1 phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOSTS=db - PMA_USER=root - PMA_PASSWORD=my-secret-pw ports: - 10080:80 $ wget https://downloads.mysql.com/docs/world.sql.gz $ mv world.sql.gz docker-entrypoint-initdb.d/ TeraTermでポートフォワード設定 起動&確認 docker-compose up // or start http://localhost:10080 でブラウザアクセスするとphpmyadminが起動 なお、PyCharmであればSSHトンネルの使用という機能でTeraTermでのSSHポートフォワードの設定の代わりができる(Professional版) dockerのmysql8環境でmbind: Operation not permitted 【SQL】MySQL公式サンプルデータベースを使う - Qiita TeraTerm SSH転送(ポートフォワード)機能よりローカルIPアドレスでphpmyadminログイン - 協栄情報ブログ PyCharmでSSHトンネル経由でDBに接続する - Qiita
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Java】MySQLの操作方法(Windows) その1:DB準備編

はじめに Javaでのデータベースの操作方法をまとめました。 当方、初心者ですが、困っている人の助けになればと思います。 本記事では、テスト用のデータベースの準備を行います。 参考サイト:Javaコード入門 次回記事 →【Java】MySQLの操作方法(Windows) その2:Javaでの操作 前提 ・Windowsを使用 ・MySQLをインストール済み (Pathを通したり、JDBCドライバもインストール済み) ・Eclipseもインストール済み なお、動作環境は下記の通りです。 項目 情報 備考 Java バージョン 14.0.2 コマンドプロンプトにて java -version で確認 MySQL バージョン 8.0.24 コマンドプロンプトにて mysql --version で確認 C:\>java -version java version "14.0.2" 2020-07-14 Java(TM) SE Runtime Environment (build 14.0.2+12-46) Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing) C:\>mysql --version mysql Ver 8.0.24 for Win64 on x86_64 (MySQL Community Server - GPL) 準備(データベース) テストで使用するデータベースとテーブルは下記のSQLファイルを実行する事で、 作成していきます。(作り直しをすぐに出来る様にするため) ※※ 注意 ※※ 下記のsqlにはデータベースの削除が含まれています。 sampleという名のデータベースが削除されますので、ご注意ください。 sampleCreate.sql /* テストで作り直しが発生しても良いように、すでにsampleという名のデータベースがあればDROP */ DROP Database IF EXISTS sample; CREATE Database sample; CREATE table sample.members ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `sex` char(1) DEFAULT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; USE sample; INSERT INTO `members` VALUES (001,'テストタロウ','男',12), (002,'うわさの太郎','男',99), (003,'かわいいあの子','女',20), (004,'いい感じのあの子','女',25); 上記のSQLファイルを適当なパスに配置します。 (今回はC:\TEMP\java_sql_testディレクトリ内に配置) コマンドプロンプトを起動し、下記のように、SQLへログインします。 Microsoft Windows [Version 10.0.19041.928] (c) Microsoft Corporation. All rights reserved. C:\TEMP\java_sql_test>mysql -u root -p Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.24 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> SQLへログイン後、sourceコマンドにてSQLファイルを指定して、実行します。 mysql> source sampleCreate.sql Query OK, 1 row affected (0.05 sec) Query OK, 1 row affected (0.01 sec) Query OK, 0 rows affected, 3 warnings (0.03 sec) Database changed Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> 結果を確認してみます。 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | | sakila | | sample | ←sampleというデータベースが作成されている | sys | | world | +--------------------+ 8 rows in set (0.03 sec) mysql> use sample Database changed mysql> show tables; +------------------+ | Tables_in_sample | +------------------+ | members | ←membersというテーブルが作成されている +------------------+ 1 row in set (0.01 sec) mysql> select * from members; ←格納されているデータを確認 +----+--------------------------+------+-----+ | id | name | sex | age | +----+--------------------------+------+-----+ | 1 | テストタロウ | 男 | 12 | ←SQLファイルにて準備したデータが入っている | 2 | うわさの太郎 | 男 | 99 | | 3 | かわいいあの子 | 女 | 20 | | 4 | いい感じのあの子 | 女 | 25 | +----+--------------------------+------+-----+ 4 rows in set (0.00 sec) mysql> これで、テスト用のデータベースの準備が完了しました。 次回、実際に準備したデータベースをJavaを用いて操作していきます。 番外編 sourceコマンドを使用してテスト用のDB作成中に下記のようなエラーが発生する場合、 ERROR 1366 (HY000): Incorrect string value: '\xE3\x82\xBF\xE3\x82\xA4...' 日本語のデータをテーブルにINSERTする際にエラーになっているようです。 (文字コードの問題) MySQLへログインし、statusコマンドを実行し、確認します。 mysql> status -------------- mysql Ver 8.0.24 for Win64 on x86_64 (MySQL Community Server - GPL) ~~ Server characterset: utf8mb3 Db characterset: utf8mb3 Client characterset: utf8mb3 Conn. characterset: utf8mb3 ~~ -------------- utf8ではなく、chcp932(?)などになっている場合、変更が必要です。 変更方法はMySQLの設定ファイルに設定を追加します。 設定ファイルのひな型は"C:\ProgramData\MySQL\MySQL Server 8.0"内に、my.iniがあります。 インストールパスを変更している場合は、異なると思われます。 (なお、programDataフォルダは隠しフォルダなので、表示オプションにて隠しフォルダを表示するに設定してください) my.iniにて、下記のように設定を変更します。 my.ini # CLIENT SECTION # ---------------------------------------------------------------------- # # The following options will be read by MySQL client applications. ~~ default-character-set=utf8 ←clientセクションにて、文字コードをutf8に設定 ~~ # SERVER SECTION # ---------------------------------------------------------------------- # # The following options will be read by the MySQL Server. Make sure that ~~ character-set-server=utf8 ←serverセクションにて、文字コードをutf8に設定 ~~ 変更したファイルはMySQLが起動時に読み込む場所に配置する必要があります。 今回は、"C:\Program Files\MySQL\MySQL Server 8.0\my.ini" に配置しました。 (インストールパスを変更している場合は適切な場所に変更してください。) 参考:MySQLの文字コードについて(https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a) 参考:my.iniの場所と配置先(https://www.dbonline.jp/mysql/install/index3.html) MySQLのサービスを再起動することで、設定が変更されます。 再度、MySQLへログインし、sourceコマンドにてSQLファイルを指定し、 データベースの作成を行うと、データのインポートが完了しました。 次回記事 →【Java】MySQLの操作方法(Windows) その2:Javaでの操作
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む