20191026のMySQLに関する記事は8件です。

Ubuntu 18.04にMySQL 5.7をインストール(OS標準)

はじめに

Ubuntu18.04にMySQL5.7をインストール

LOG

インストール

# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

# apt update; apt install -y mysql-server
... 略

各種確認

# service mysql start
# mysql -u root -e'select version();'
+-------------------------+
| version()               |
+-------------------------+
| 5.7.27-0ubuntu0.18.04.1 |
+-------------------------+
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntu 16.04にMySQL 5.7をインストール(OS標準)

はじめに

Ubuntu16.04にMySQL5.7をインストール

LOG

インストール

# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

# apt update; apt install -y mysql-server
... 略

各種確認

# service mysql start
# mysql -u root -e'select version();'
+-------------------------+
| version()               |
+-------------------------+
| 5.7.27-0ubuntu0.16.04.1 |
+-------------------------+
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntu 14.04にMySQL 5.5をインストール(OS標準)

はじめに

Ubuntu14.04にMySQL5.5をインストール

LOG

インストール

# cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.6 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.6 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

# apt update; apt install -y mysql-server
... 略

各種確認

# service mysql start
# mysql -u root -e'select version();'
+-------------------------+
| version()               |
+-------------------------+
| 5.5.62-0ubuntu0.14.04.1 |
+-------------------------+
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Debian 8にMySQL 5.5をインストール(OS標準)

はじめに

Debian 8にMySQL5.5をインストール

LOG

インストール

# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# apt update; apt install -y mysql-server
... 略

各種確認

# service mysql start
# mysql -u root -e'select version();'
+-----------------+
| version()       |
+-----------------+
| 5.5.62-0+deb8u1 |
+-----------------+
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelで画像投稿機能を実装する

Laravelで画像投稿機能を実装します。具体的には以下のような機能を実装します。

552fd9bc96fec88f5411232502dec300.png
上記の写真で画像ファイルを選択し、フォームにコメントを入力後、投稿ボタンを押すと、
a063c3be9f1d7d7c178c88822d409816.png

上記の写真のように、画像とコメントを表示する機能を実装します。

開発環境

Laravel:5.5.46
MYSQL:5.5.62
PHP:7.2.17
画像アップロードサーバ:AmazonS3

マイグレーションファイル作成

画像とコメントを保存するためのテーブルpostsを作成します。ターミナルで以下のコマンドを実行しマイグレーションファイルを作成します。

$ php artisan make:migration _create_posts_table --create=posts

作成したマイグレーションファイルを編集します。

database/migrations/2019_10_22_220848_create_posts_table.php
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('image_file_name',100);//追加
            $table->string('image_title',100);//追加
            $table->timestamps();

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

ターミナルで以下のコマンドを入力しマイグレーションを実行します。

$ php artisan migrate

モデル

Postモデルを作成します。ターミナルで以下のコマンドを実行しモデルを作成します。

$ php artisan make:model Post

作成したモデルを編集します。

app/Post.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
//後にcreate()メソッドで保存するカラムを指定
    protected $fillable = [
        'image_file_name', 'image_title',
    ];
}

ルータ

ルータを記述します。ページを表示したときと、投稿ボタンを押したときのルーティングを記述します。

routes/web.php
Route::post('upload', 'PostsController@upload')->name('upload');
Route::get('/', 'PostsController@index');

コントローラ

ターミナルで以下のコマンドを実行しコントローラを作成します。

$ php artisan make:controller PostsController

web.phpに記述した各ルーティングに対応したアクションを記述します。

/app/Http/Controllers/PostsController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\User;
use App\Post;
use Storage;
use Illuminate\Support\Facades\Validator;

class PostsController extends Controller
{
//画像およびコメントアップロード
public function upload(Request $request){

//Validatorファサードのmakeメソッドの第1引数は、バリデーションを行うデータ。
//第2引数はそのデータに適用するバリデーションルール
        $validator = Validator::make($request->all(), [
            'file' => 'required|max:10240|mimes:jpeg,gif,png',
            'comment' => 'required|max:191'
        ]);

//上記のバリデーションがエラーの場合、ビューにバリデーション情報を渡す
        if ($validator->fails()){
            return back()->withInput()->withErrors($validator);
        }
//s3に画像を保存。第一引数はs3のディレクトリ。第二引数は保存するファイル。
//第三引数はファイルの公開設定。
        $file = $request->file('file');
        $path = Storage::disk('s3')->putFile('/', $file, 'public');
//カラムに画像のパスとタイトルを保存
        Post::create([
            'image_file_name' => $path,
            'image_title' => $request->comment
        ]);

        return redirect('/');
    }
//ページ表示
    public function index(){
        $posts = \App\Post::all();

        $data = [
            'posts' => $posts,
        ];

        return view('welcome',$data);
    }
}

ターミナルで以下のコマンドを入力し、ビューでFormファサードを使用できるようにします。

$ composer require "laravelcollective/html":"5.5.*"

AWSの S3にアクセスするライブラリを導入します。
$ composer require league/flysystem-aws-s3-v3

.envで環境変数を設定します。

.env
AWS_S3_KEY=[your Access Key ID]
AWS_S3_SECRET=[your Secret Key]
AWS_S3_REGION=[your region]
AWS_S3_BUCKET=[your backet]

ビュー

resources/viewsに最初からあるwelcome.blade.phpを編集します。

resources/views/welcome.blade.php
//投稿フォーム
{!! Form::open(['route' => 'upload', 'method' => 'post','files' => true]) !!}
    <div class="form-group">
        {!! Form::label('file', '画像投稿', ['class' => 'control-label']) !!}
        {!! Form::file('file') !!}
    </div>
    <div class="form-group m-0">
        {!! Form::label('textarea', '投稿コメント', ['class' => 'control-label']) !!}
        {!! Form::textarea('comment',null,['class' => 'form-control']) !!}
    </div>   
    <div class="form-group text-center">
        {!! Form::submit('投稿', ['class' => 'btn btn-primary my-2']) !!}
    </div>
{!! Form::close() !!}
//画像とコメントをすべて表示
@foreach($posts as $post)
    <div class="card-header text-center">
        <img src= {{ Storage::disk('s3')->url($post->image_file_name) }} alt="" width=250px height=250px></a>
    </div>
    <div class="card-body p-1">
        <span class="card-title">{{ $post->image_title }}</span>
    </div>
@endforeach
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MysqlのソートでNULLや0を最後に並べる方法

前置き

Mysqlでは、
シンプルにソートを行うと、
0NULLは先に並べられてしまいます。

SQL
SELECT *
FROM tests
ORDER BY
    rank ASC;
NULL->0->1~の順番になってしまう
+----+------+
| id | rank |
+----+------+
|  4 | NULL |
|  3 |    0 |
|  1 |    1 |
|  2 |    2 |
+----+------+

以下の方法で、NULLや0を最後に並べられるので、ぜひ使ってみてください!

NULL を最後に並べたい場合

SQL
SELECT *
FROM tests
ORDER BY
    rank IS NULL ASC, /* 追加 */
    rank ASC;
0->1~->NULLの順番になる
+----+------+
| id | rank |
+----+------+
|  3 |    0 |
|  1 |    1 |
|  2 |    2 |
|  4 | NULL |
+----+------+

NULL と 0 を最後に並べたい場合

SQL
SELECT *
FROM tests
ORDER BY
    rank IS NULL ASC, /* 追加 */
    rank = 0 ASC, /* 追加 */
    rank ASC;
1~->0&NULLの順番になる
+----+------+
| id | rank |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    0 |
|  4 | NULL |
+----+------+
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mysqldump件数を指定して取得

Command

mysqldump -h [DBホスト名] -u [DBユーザー名] -p -t [DB名] [テーブル名] --where="true limit [出力したい件数]" > [出力ファイル名]

使う機会あんまりないけど...。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-composeでWordpressの構築 (Windows)

概要

  • 手元のPCでWordpressを軽く触りたい
  • 手元のPCにPHPやDBをインストールしていない(環境設定とか面倒)
  • MAMPのような導入に便利なパッケージあるけど、やっぱり手元のPC環境はきれいなままにしたい
  • そもそも、Wordpressで本格的に何かを開発するのではなくて勉強程度に触れるだけ

...ってな時にはDockerで試してみるのもありですね!

環境

  • Windows 10 pro
  • Docker version 19.03.2
  • docker-compose version 1.24.1

準備

  • 下記ファイルを用意
docker-compose.yml
version: '3.4'
networks: { intr: { external: true } }
volumes:
  wp_db_data: { driver: "local" }
services:

  wp:
    image: wordpress
    networks: [ "intr" ]
    volumes:
    - ./www:/var/www/html
    environment:
      WORDPRESS_DB_HOST: wp_db:3306
      WORDPRESS_DB_PASSWORD: pass
    ports: [ 8001:80 ]

  wp_db:
    image: mysql:5.7
    networks: [ "intr" ]
    volumes:
     - wp_db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: pass

構築

docker-compose.ymlを置いたディレクトリで下記のコマンドを実行

cmd
docker network create intr
docker-compose up -d

動作確認

[フロント画面]:http://localhost:8001
[管理画面]:http://localhost:8001/wp-admin

補足

docker-compose.ymlに定義した内容の補足

  • networks
    • 将来的に別のdocker-compsoe.ymlで定義したコンテナからのアクセスを考慮し、共通リンク用のネットワークを作成してからコンテナを立ち上げるようにしています。(不要の場合は削除してよいです。)
    • そのため、docker-compose up -dの前に、docker network create intrを実行して事前にネットワークを作っています。
    • docker network lsで既存のnetworkの一覧を確認できます。
  • volumes
    • データを永続化させるためにトップレベルにdata volumesを指定しています。
    • そのため、コンテナを再構築することになってもdata volumesさえ消さなければデータは無事です。
    • 今回、Docekr for Windowsを標準のまま利用しているので、Mysqlに登録されたデータはHyper-Vで作成した仮想マシンMobyLinuxVMにマウントされています。
    • docker-compose down -vを実行するとdata volumesも消えるのでデータは消失します。
    • docker volumes lsで 既存のvolumes一覧を確認できます。
  • services
    • Wordpress(wp)とMysql(wp_db)のコンテナを立ち上げています。
    • wpではホスト側のエディタ等を使用してWordpressのカスタマイズが出来るようにコンテナ内の/var/www/htmlをマウントしてます。
    • wpではホスト側の8001番ポートとコンテナ側の80番ポートをマッピングしているので、localhost:8001でブラウザからアクセスして動作を確認することができます。
    • wp_dbのコンテナの中には以下のコマンドで入ることができます。
    • docker-compose exec wp_db sh
    • コンテナの中に入ったら、下記のようなMysqlのコマンドでDBの参照等を行うことができます。
    • mysql -uuser -ppass wordpress

以上です!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む