- 投稿日:2020-05-23T19:11:27+09:00
MacにMySQLインストール
- 投稿日:2020-05-23T19:00:50+09:00
Windows10 home +VirtualBox + Vagrantの仮想環境にCentOS6 + Apache2.4 + PHP5.3 + MySQL5.5を入れる
Windowsの設定
Windows home
ならBIOSを開いて、仮想化支援機構を有効化し、Hyper-V
を無効化する。BIOS
基本的というか大体のPCでは下記の手順でBIOSにアクセスできる。
BIOSにアクセスできなかったら、各メーカーやPCの製品名のBIOSへアクセスする手順を調べる。1.
Shift
キーを押しながらシャットダウン。
2.F2
キーを押しながら起動
3.Advanced
タブのCPU Configuration
欄にあるIntel(R) VirtualizationTechnology
をEnabled
にする3はメーカーやBIOSによって名前などが異なることがあるので、記載されてなかったら調べる。
Hyper-Vの無効化
1. 管理者権限でを
コマンドプロント
を開いて、下記のコードを実行する。
コードはWin10にVirtualBox+Vagrantを用いた環境構築する為の下準備から。> bcdedit /copy {current} /d "Disable Hyper-V" エントリは {文字列X} に正常にコピーされました。 >bcdedit /set {文字列X} hypervisorlaunchtype off2.
Shift
を押しながら電源を再起動
3. 再起動するとWindows 10 home
とDisable Hyper-V
を選択できる画面が表示されるので、Disable Hyper-V
を選択。VirtualBox + Vagrant + CentOS
VirtualBox:
windows
といったPCに搭載されているホストOSの上で実行できるゲストOSを実行できるソフトウェア
Vagrant: VirtualBoxといったゲストOSでの仮想環境を実用的なものにするためのソフトウェア以上を参考に、導入していく。
1. VirturalBoxとVagrantのインストール
VirtualBoxとVagrantから
Windows
用の実行パッケージをインストールして実行。
~.exe
を起動しても特に注意すべき点などはないので各自の作業環境に合わせて導入。2. VirtualBoxにCentOSを登録する
Vagrantbox.esから導入したいCentOSのBOXのURLをコピーし、
$ vagrant box add
を実行。
今回はCentOS6
を導入したいので、CentOS 6.6 x64 (Minimal, VirtualBox Guest Additions, Puppet 3.7.5 - see here for more infos)
を選ぶ。
コマンドの意味はvagrant box {付けたい名前} {boxのURL}
。$ vagrant box add CentOS6.6 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.0.0/centos-6.6-x86_64.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'CentOS6.6' (v0) for provider: box: Downloading: https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.0.0/centos-6.6-x86_64.box box: ==> box: Successfully added box 'CentOS6.6' (v0) for 'virtualbox'!3. Vagrant用のディレクトリを作成する
BOXの追加に成功したら、仮想環境用のディレクトリを作成
C:\>mkdir CentOS6.6 C:\>cd CentOS6.64. 仮想環境を定義する.Vagrantfileなどの初期化を行う
C:\CentOS6.6>vagrant init CentOS6.6 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.5. 初期化が完了したら、CentOSを起動する
C:\CentOS6.6>vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'CentOS6.6'... ==> default: Matching MAC address for NAT networking... ==> default: Setting the name of the VM: CentOS66_default_1589977223313_63395 ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) (中略) ==> default: Mounting shared folders... default: /vagrant => C:/CentOS6.66. ssh接続を行う
sshクライアントがないようだったら、Tera TermやCygwinを用意する。
ターミナルからの接続だと、ログインするときにパスワードを聞かれることがある。
パスワードはvagrant
で大丈夫(なはず)。C:\CentOS6.6>vagrant sshその後、現在のディレクトリを確認。
今後の導入作業でディレクトリを転々とすることが多いので、最初はどこに居たのか覚えておく。[vagrant@localhost ~]$ pwd /home/vagrant8. localeの変更
locale
は言語や日時などの設定。
今回導入したCentOSは初期設定だとドイツ語だったので、作業しやすいように日本語に変更する。
locale変更方法(CentOS6.5) - Qiitaを参考に実行していく。
$ locale
で現在の設定を確認。[vagrant@localhost ~]$ locale LANG=de_DE.UTF-8 LC_CTYPE="de_DE.UTF-8" LC_NUMERIC="de_DE.UTF-8" LC_TIME="de_DE.UTF-8" LC_COLLATE="de_DE.UTF-8" LC_MONETARY="de_DE.UTF-8" LC_MESSAGES="de_DE.UTF-8" LC_PAPER="de_DE.UTF-8" LC_NAME="de_DE.UTF-8" LC_ADDRESS="de_DE.UTF-8" LC_TELEPHONE="de_DE.UTF-8" LC_MEASUREMENT="de_DE.UTF-8" LC_IDENTIFICATION="de_DE.UTF-8" LC_ALL=
$ locale -a
で設定できるlocale
一覧を表示。
一覧の中にja_JP.utf8
があるのを確認する。[vagrant@localhost ~]$ locale -a [vagrant@localhost ~]$ sudo vim /etc/sysconfig/i18n
LANG="ja_JP.UTF-8"
にする。LANG="ja_JP.UTF-8" SYSFONT="latarcyrheb-sun16"
. {ファイル}
で{ファイル}を読み込む。
最後に$ locale
を入力して、ja_JP.UTF-8
になっているかを確認。[vagrant@localhost ~]$ . /etc/sysconfig/i18n [vagrant@localhost ~]$ locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=9. 既存パッケージのアップグレード
CentOsでは
yum
というパッケージマネージャーが使用されている。
これから色んなソフトをインストールしていくのに備えて、yum
で管理されているパッケージのアップグレードを行う。[vagrant@localhost ~]$ sudo yum -y upgradeApache2.4
Apache: 世界中で利用されているWebサーバーツール。
以下の記事を参考に
Apache
を導入していく。
基本は、エラーの対応に使ったのは、
1. ディレクトリの移動
[vagrant@localhost /]$ cd /usr/local/src2. Apacheの導入に必要なyumパッケージのインストール
[vagrant@localhost src]$ sudo yum install -y wget apr-devel apr-util-devel gcc pcre pcre-devel perl perl-devel libtool libtool-devel systemd-devel3. Apacheの構築に必要なアプリをインストール
make
はyum
などとは違う方法でアプリをインストールする方法。
Index of /apache/aprから最新のapr-{バージョン}
,apr-util-{バージョン}
を確認。下記は実行当時の物。
pcre
はPCRE - Browse /pcre/8.44 at SourceForge.netから最新のバージョンを確認し、pcre-{バージョン}.tar.gz
を入力。[vagrant@localhost src]$ sudo wget http://mirrors.ocf.berkeley.edu/apache//apr/apr-1.7.0.tar.gz [vagrant@localhost src]$ tar xzf apr-1.5.2.tar.gz [vagrant@localhost src]$ cd apr-1.7.0 [vagrant@localhost apr-1.7.0]$ ./configure [vagrant@localhost apr-1.7.0]$ make [vagrant@localhost apr-1.7.0]$ make install [vagrant@localhost apr-1.7.0]$ cd .. [vagrant@localhost src]$ sudo wget http://mirrors.ocf.berkeley.edu/apache//apr/apr-util-1.6.1.tar.gz [vagrant@localhost src]$ sudo tar xzf apr-util-1.6.1.tar.gz [vagrant@localhost src]$ cd apr-util-1.6.1 [vagrant@localhost apr-util-1.6.1]$ sudo ./configure --with-apr=/usr/local/src/apr-1.7.0 [vagrant@localhost apr-util-1.6.1]$ sudo make [vagrant@localhost apr-util-1.6.1]$ sudo make install [vagrant@localhost apr-util-1.6.1]$ cd .. [vagrant@localhost src]$ sudo wget https://sourceforge.net/projects/pcre/files/pcre/8.44/pcre-8.44.tar.gz [vagrant@localhost src]$ sudo tar xzf pcre-8.44.tar.gz [vagrant@localhost src]$ cd pcre-8.44 [vagrant@localhost pcre-8.44]$ sudo ./configure [vagrant@localhost pcre-8.44]$ sudo make [vagrant@localhost pcre-8.44]$ sudo make install4. Apacheのインストール
httpd: CentOSなどのサーバーに在住してるHTTPSの処理を行うデーモン
Index of /software/apache/httpdからhttpd-{バージョン}.tar.gz
を確認。下記は実行当時の物。[vagrant@localhost pcre-8.44]$ cd .. [vagrant@localhost src]$ sudo wget http://ftp.tsukuba.wide.ad.jp/software/apache//httpd/httpd-2.4.43.tar.gz [vagrant@localhost src]$ sudo tar xzf httpd-2.4.43.tar.gz [vagrant@localhost src]$ sudo cp -Rp /usr/local/src/apr-1.7.0 /usr/local/src/httpd-2.4.43/srclib/apr [vagrant@localhost src]$ sudo cp -Rp /usr/local/src/apr-util-1.6.1 /usr/local/src/httpd-2.4.43/srclib/apr-util [vagrant@localhost src]$ cd httpd-2.4.43 [vagrant@localhost httpd-2.4.43]$ ./configure --with-pcre=/usr/local/src/pcre-8.44/pcre-config --enable-rewrite --with-icluded-apr Server Version: 2.4.43 Install prefix: /usr/local/apache2 C compiler: gcc -std=gnu99 CFLAGS: -g -O2 -pthread CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE LDFLAGS: LIBS: C preprocessor: gcc -E [vagrant@localhost httpd-2.4.43]$ sudo make [vagrant@localhost httpd-2.4.43]$ sudo make install5. Apache起動スクリプトの作成
[vagrant@localhost httpd-2.4.43]$ cd /home/vagrant [vagrant@localhost ~]$ sudo cp -ip /usr/local/src/httpd-2.4.43/build/rpm/httpd.init /etc/init.d/httpd [vagrant@localhost ~]$ sudo vim /etc/init.d/httpd/etc/init.d/httpd#60行目あたり httpd=${HTTPD-/usr/local/apache2/bin/httpd} pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid} #追記 CONFFILE=/usr/local/apache2/conf/httpd.conf
yum
などを使ってパッケージインストールからApache
を導入したようにhttpd
を使えるようにする。[vagrant@localhost ~]$ sudo vim /usr/local/apache2/conf/httpd.conf/usr/local/apache2/conf/httpd.conf#164行目あたり User apache Group apache[vagrant@localhost ~]$ sudo groupadd -g 48 apache [vagrant@localhost ~]$ sudo useradd -g apache -u 48 apache6. Apacheの起動
[vagrant@localhost ~]$ sudo chkconfig --add httpd [vagrant@localhost ~]$ sudo chkconfig httpd on一旦、仮想環境をシャットダウン。
[vagrant@localhost ~]$ sudo shutdown -h now7. .Vagrantfileの編集
windows
のエディターとかから、仮想環境用のディレクトリにある.Vagrantfile
を編集する。
この編集によって、windows
のブラウザからCentOSで操作したファイルを共有したり、ブラウザで確認できるようになる。
以下のように編集する。Vagrantfile.(中略) # Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network "private_network", ip: "192.168.33.10" (中略) # Provider-specific configuration so you can fine-tune various # backing providers for Vagrant. These expose provider-specific options. # Example for VirtualBox: # config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--memory", "1024"] end # # Display the VirtualBox GUI when booting the machine # vb.gui = true # # # Customize the amount of memory on the VM: # vb.memory = "1024" # end # # View the documentation for the provider you are using for more # information on available options. # Enable provisioning with a shell script. Additional provisioners such as # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the # documentation for more information about their specific syntax and use. # config.vm.provision "shell", inline: <<-SHELL # apt-get update # apt-get install -y apache2 # SHELL config.vm.synced_folder "../VB_share", "/usr/local/apache2/htdocs", mount_options:['dmode=777','fmode=777'] end仮想環境用のディレクトリを作成した所に
VB_share
を作成。
その中に下記ファイルを追加。index.html<h1>Helo,World!!</h1>8. Apacheが稼働しているか確認
C:\CentOS6.6>vagrant reload ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat default: Adapter 2: hostonly ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) (中略) ==> default: Mounting shared folders... default: /vagrant => C:/CentOS6.6 default: /var/www/html => C:/VB_share ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run. C:\CentOS6.6>vagrant ssh以下のURLをクリックして、その下の画像のような表示がされたら
Apache
は無事起動している。
http://192.168.33.10/index.htmlPHP5.3
atton.blog: php 5.x + apache httpd 2.4.x を make するを参考に進めていく。
1. PHPのインストール
PHP: Releasesから欲しい
PHP
のバージョンを確認。
今回は5.3
系の中で一番新しい5.3.29
を。
./configure --with-apxs2=/usr/local/apache2/bin/apxs
はApache
にPHP5
系を認識してもらうlibphp5.so
を作るためのもの。
これを書いておくとhttpd.conf
でLoadModule
できる場所にlibphp5.so
が自動で作成される。[vagrant@localhost /]$ cd /usr/local/src [vagrant@localhost src]$ sudo yum install -y libxml2 libxml2-devel [vagrant@localhost src]$ sudo wget http://jp2.php.net/get/php-5.3.29.tar.gz/from/this/mirror -O php-5.3.29.tar.gz [vagrant@localhost src]$ sudo tar xzf php-5.3.29.tar.gz [vagrant@localhost src]$ cd php-5.3.29 [vagrant@localhost php-5.3.29]$ sudo ./configure --with-apxs2=/usr/local/apache2/bin/apxs +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. [vagrant@localhost php-5.3.29]$ sudo make [vagrant@localhost php-5.3.29]$ sudo make test [vagrant@localhost php-5.3.29]$ sudo make install [vagrant@localhost php-5.3.29]$ php -v PHP 5.3.29 (cli) (built: May 21 2020 04:19:38) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies2. httpd.conf`の編集
Apache
にPHP5.3
を認識してもらえるように/usr/local/apache2/conf/httpd.conf
を編集する。[vagrant@localhost php-5.3.29]$ sudo vim /usr/local/apache2/conf/httpd.conf/usr/local/apache2/conf/httpd.conf#あるか確認。なかったら追加。 LoadModule php5_module modules/libphp5.so #一番下に追記。 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>3. ApacheがPHP5.3を認識しているか確認
先程
index.html
を作成したVB_share
に下記ファイルを追加。info.php<?php phpinfo(); ?>
index.html
の時と同様、下のURLをクリックして、その下の画像が表示されているか確認。+a php.iniを編集
Apache2 PHP5 インストール | CentOSサーバー構築マニュアル.comを参考に、
PHP
の設定を行う。[vagrant@localhost /]$ cd /usr/local/src/php-5.3.29 [vagrant@localhost php-5.3.29]$ sudo cp php.ini-development /usr/local/lib/php.ini [vagrant@localhost php-5.3.29]$ sudo vim /usr/local/lib/php.iniMySQL5.5
CentOSにMySQL 5.5をバージョン指定してインストール | 俺日記を参考に進めていく。
1. yumを使ったパッケージ操作
[vagrant@localhost ~]$ sudo yum remove mysql* [vagrant@localhost ~]$ sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm [vagrant@localhost ~]$ sudo vim /etc/yum.repos.d/mysql-community.repo何も操作しないと、
MySQL5.6
がインストールされるため、MySQL5.5
がインストールされるように、/etc/yum.repos.d/mysql-community.repo
を編集する。/etc/mysql-community.repo# Enable to use MySQL 5.5 [mysql55-community] name=MySQL 5.5 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.5-community/el/6/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql # Enable to use MySQL 5.6 [mysql56-community] name=MySQL 5.6 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/ enabled=0 gpgcheck=1 gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[vagrant@localhost ~]$ sudo yum -y install mysql mysql-devel mysql-server mysql-utilities2. MySQLの起動と確認
[vagrant@localhost ~]$ sudo service mysqld start [vagrant@localhost ~]$ sudo chkconfig mysqld on [vagrant@localhost ~]$ sudo service mysqld status mysqld (pid 3173) を実行中... [vagrant@localhost ~]$ mysql --version mysql Ver 14.14 Distrib 5.5.62, for Linux (x86_64) using readline 5.13. MySQLの設定
MySQL
にとって重要なmysql.sock
の場所を確認する。[vagrant@localhost ~]$ sudo /usr/bin/mysqladmin -u root password "{好きなパスワードを設定}" [vagrant@localhost ~]$ sudo mysql -u root -p Enter password: mysql> show variables like "%sock%"; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | socket | /var/lib/mysql/mysql.sock | +---------------+---------------------------+ 1 row in set (0.00 sec)
MySQL
の文字コードを確認する。mysql> show variables like "%chara%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | 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/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql> exit Bye [vagrant@localhost ~]$
character_set_database
とcharacter_set_server
をUTF-8に変更する。
mysqlで文字コードをutf8にセットする - Qiitaを参考に作業する。[vagrant@localhost ~]$ sudo vim /etc/my.cnf/etc/my.cnf[mysqld] character-set-server=utf8 [client] default-character-set=utf8[vagrant@localhost ~]$ sudo service mysqld restart mysqld を停止中: [ OK ] mysqld を起動中: [ OK ] [vagrant@localhost ~]$ sudo mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.62 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 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> 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)参考資料
Windowsの設定
VirtualBox + Vagrant + CentOS
Apache2.4
- Apache2.4 ソースインストール | Skyarch Broadcasting
- atton.blog: php 5.x + apache httpd 2.4.x を make する
- 自明かもしれない: Apache 2.4 系をソースからインストールします
- Apache 2.2.4 configureでエラー:おぼえがき:So-net blog
PHP5.3
MySQL5.5
- 投稿日:2020-05-23T17:18:17+09:00
MAMPのインストール
概要
自宅サーバーを立ち上げるため、MAMPを利用してみました。
MAMP とは
- Mac
- Apache
- MySQL
- PHP
の略と言われてるようですが、Win版もあるし、公式ページに特にこの事についての記載が発見できず、正確な情報は不明です。
パッケージのダウンロード
まずは、MAMP公式サイトからパッケージをダウンロードしましょう。
https://www.mamp.info/en/
公式サイトのFreeDonwloadをクリック
Downloadページで mac のパッケージを選択
バージョンはアクセスのタイミングで変わるかと思いますが、インストール用の pkg ファイルがダウンロードできます。
インストール
pkgファイルをダブルクリックすると、インストール手続きが始まります。
使用承諾やインストール先の選択等がありますので、指示に従いながら勧めていきます。
MAMPの起動
インストールが完了したら、MAMP起動します。デフォルト設定でインストールをしていれば、アプリケーションフォルダになっていると思うので、Launchpad等から起動できます。
※PROとFREE版があるので、FREEの方を起動。
起動したらコントロール画面が表示されるので、「Start Servers」をクリックしてApacheとMySQLを起動します。
起動が完了すると、「Start Servers」が緑になりブラウザで初期ページが表示されます。
以上でインストールは完了です。
- 投稿日:2020-05-23T17:18:17+09:00
MacにMAMPをインストールする
概要
自宅のMacにWebサーバーを立ち上げるため、MAMPを利用してみました。
MAMP とは
- Mac
- Apache
- MySQL
- PHP
の略と言われてるようですが、Win版もあるし、公式ページに特にこの事についての記載が発見できず、正確な情報は不明です。
インストール手順
パッケージのダウンロード
まずは、MAMP公式サイトからパッケージをダウンロードしましょう。
https://www.mamp.info/en/
公式サイトのFreeDonwloadをクリック
Downloadページで mac のパッケージを選択
バージョンはアクセスのタイミングで変わるかと思いますが、インストール用の pkg ファイルがダウンロードできます。
インストール
pkgファイルをダブルクリックすると、インストール手続きが始まります。
使用承諾やインストール先の選択等がありますので、指示に従いながら勧めていきます。
MAMPの起動
インストールが完了したら、MAMP起動します。デフォルト設定でインストールをしていれば、アプリケーションフォルダになっていると思うので、Launchpad等から起動できます。
※PROとFREE版があるので、FREEの方を起動。
起動したらコントロール画面が表示されるので、「Start Servers」をクリックしてApacheとMySQLを起動します。
起動が完了すると、「Start Servers」が緑になりブラウザで初期ページが表示されます。
以上でインストールは完了です。
- 投稿日:2020-05-23T14:45:27+09:00
【重複行排除_MySQL,PostgreSQL,Oracleの違い】指定したカラム以外他のカラム情報も欲しい
・SELECT DISTINCTでは重複判定に指定したカラム項目しか返されない
サンプルテーブル
ID 名前 趣味 場所 101 田中 映画 映画館 102 田中 漫画 本屋 103 田中 水泳 体育館 104 田中 散歩 公園 105 佐藤 映画 映画館 106 佐藤 水泳 体育館 107 清水 漫画 本屋 108 清水 水泳 体育館 109 清水 散歩 公園 SELECT DISTINCT 名前 FROM サンプルテーブル
とすると、返されるのは名前カラムだけです。
名前 田中 佐藤 清水 ・重複判定に指定したカラム以外のカラムも取得するSQL
サンプルテーブルから取得したい情報
ID 名前 趣味 場所 101 田中 映画 映画館 105 佐藤 映画 映画館 107 清水 漫画 本屋 MySQL、PostgreSQL、Oracle、それぞれやり方が違います。
MySQL
SELECT * FROM サンプルテーブル GROUP BY 名前PostgreSQL
SELECT DISTINCT ON(名前)* FROM サンプルテーブルOracle
SELECT * FROM サンプルテーブル WHERE ROWID IN (select min(ROWID) from サンプルテーブル GROUP BY 名前)
- 投稿日:2020-05-23T14:45:27+09:00
【SQL重複行の排除】指定したカラム以外他のカラム情報も欲しい(MySQL、PostgreSQL、Oracleの違い)
・SELECT DISTINCTでは重複判定に指定したカラム項目しか返されない
サンプルテーブル
ID 名前 趣味 場所 101 田中 映画 映画館 102 田中 漫画 本屋 103 田中 水泳 体育館 104 田中 散歩 公園 105 佐藤 映画 映画館 106 佐藤 水泳 体育館 107 清水 漫画 本屋 108 清水 水泳 体育館 109 清水 散歩 公園 SELECT DISTINCT 名前 FROM サンプルテーブル
とすると、返されるのは名前カラムだけです。
名前 田中 佐藤 清水 ・重複判定に指定したカラム以外のカラムも取得するSQL
サンプルテーブルから取得したい情報
ID 名前 趣味 場所 101 田中 映画 映画館 105 佐藤 映画 映画館 107 清水 漫画 本屋 MySQL、PostgreSQL、Oracle、それぞれやり方が違います。
MySQL
SELECT * FROM サンプルテーブル GROUP BY 名前PostgreSQL
SELECT DISTINCT ON(名前)* FROM サンプルテーブルOracle
SELECT * FROM サンプルテーブル WHERE ROWID IN (select min(ROWID) from サンプルテーブル GROUP BY 名前)
- 投稿日:2020-05-23T12:21:32+09:00
基礎からのMySQL part03 chapter08
MySQLを使いこなす
カラムの表示を工夫して「SELECT」を実行する
カラムを入れ替えて表示する
SELECT カラム2, カラム1 FROM テーブル名;
エイリアス(alias)を使う
- カラムにわかりやすい「ニックネーム」を付けること
- 「偽名」や「別名」という意味で「本物を参照するためにユーザが自由に付けた名前」という使われ方
SELECT カラム名 AS エイリアス FROM テーブル名;
- ()などの都空手記号を使う場合はエイリアス名を「" "」で囲む
計算したり、文字列を処理したりして表示する
関数を使って計算する
平均
SELECT AVG(カラム名) FROM テーブル名;
合計
SELECT SUM(カラム名) FROM テーブル名
個数
SELECT COUNT(カラム名) FROM テーブル名
各種情報を表示する関数
円周率
SELECT PI();
MySQLサーバーのバージョン
SELECT VERSION();
現在使っているデータベース
SELECT DATABASE();
現在のユーザ
SELECT USER();
引数で指定した文字の文字エンコーディング
SELECT CHARSET('この文字');
文字列を結合する
SELECT CONCAT(カラム1, カラム2) FROM テーブル名;
文字列操作で活躍する関数
右から取り出す:RIGHT
SELECT RIGHT(カラム名, 文字数) FROM テーブル名;
左から取り出す:LEFT
SELECT LEFT(カラム名, 文字数) FROM テーブル名;
○番目から×個取り出す:SUBSTRING
SELECT SUBSTRING(カラム名, ○, ×) FROM テーブル名;
繰り返して表示:REPEAT
SELECT REPEAT('文字', カラム名) FROM テーブル名;
- 「文字」をカラム名の回数繰り返す
逆さから表示:REVERSE
SELECT REVERSE(カラム名) FROM テーブル名;
日付、時刻の関数
INSERT INTO テーブル名 (カラム名) VALUES(NOW());
- DATETIME型
条件を指定した選択
レコード数を決めて表示する
SELECT カラム名 FROM テーブル名 LIMIT 表示するレコード数;
WHEREを使った抽出
SELECT カラム名 FROM テーブル名 WHERE 条件;
比較演算子
比較演算子 意味 <> とは異なる ○ IN × ×のリストの中に○がある ○ NOT IN × ×のリストの中に○がない ○ BETWEEN × AND △ ×から△の間に丸がある ○ NOT BETWEEN × AND △ ×から△の間に○がない 文字列を使った表現
SELECT * FROM テーブル名 WHERE カラム名='文字';
LIKE:あいまい検索
SELECT * FROM テーブル名 WHERE カラム名 LIKE '文字';
- '文字'という表現を含む
文字列を対象としたワイルドカードとその利用例
ワイルドカード 意味 % 任意の文字列が該当 _ 任意の1文字が該当
SELECT * FROM テーブル名 WHERE カラム名 LIKE '%文字';
- '文字%'で前方一致
- '%文字'で後方一致
- '%文字%'で部分一致
指定した文字列を含まないものを取り出す
SELECT * FROM テーブル名 WHERE カラム名 NOT LIKE '文字%';
NULLの場合
SELECT * FROM テーブル名 WHERE カラム名 IS NULL;
NULLでない場合
SELECT * FROM テーブル名 WHERE カラム名 IS NOT NULL;
重複したデータを省いて抽出する
SELECT DISTINCT カラム名 FROM テーブル名;
複数の条件を指定した選択
ANDを使う
SELECT * FROM テーブル名 カラム1 BETWEEN 50 AND 100;
SELECT * FROM テーブル名 WHERE カラム1>=50 AND カラム2<=100
は同じORを使う
SELECT * FROM テーブル名 WHERE カラム名1 NOT BETWEEN 50 AND 200;
SELECT * FROM テーブル名 WHERE カラム名1 < 50 OR カラム名2 > 200;
は同じANDやORを複数使う
- ANDとORが混ざっている時はANDが優先される
CASE WHENを使う
SLECT CASE WHEN 条件1 THEN 表示する値 WHEN 条件2 THEN 表示する値 WHEN 条件2 THEN 表示する値 ELSE 全ての条件に当てはまらない時の値 END並べ替え
昇順(小→大)に並べ替えて表示する
SELECT カラム名 FROM テーブル名 ORDER BY キートなるカラム (ASC);
- 昇順であることを明示する時は最後にASCを付ける
降順に並べ替えて表示する
SELECT カラム名 FROM テーブル名 ORDER BY キートなるカラム DESC;
- 必ず「DESC」を付ける
表示するレコードの範囲を決める
SELECT カラム名 FROM テーブル名 LIMIT 表示するレコード OFFSET 表示開始レコードのシフト数;
- 表示開始レコードのシフト数:何個移動したところから始めるか
グループごとに表示する
SELECT カラム名 FROM テーブル名 GROUP BY グループ化するカラム;
グループごとの数を数えてみる
SELECT COUNT(*) FROM テーブル名 GROUP BY bang;
グループごとの合計、平均を表示する
SELECT カラム名1, SUM(カラム名2) AS 合計 FROM テーブル名 GROUP BY カラム名1;
条件付きグループで表示
グループごとに処理する
グループに分けて条件をつけて取り出す
SELECT 集計したカラム FROM テーブル名 GROUP BY グループ化するカラム HAVING 条件;
- グループ化した値に対して条件を設定
抽出してからグループにする
- 「WHERE」で条件を設定して最後に「GROUP BY」でグループ化
グループ化してから並び替える
-「GROUP BY」の次に「ORDER BY」
グループ化手順のまとめ
記述順序
1. WHERE条件
2. GROUP BY ××
3. ORDER BY 〇〇 (DESC)
- 投稿日:2020-05-23T12:04:26+09:00
Docker × Mysqlでユーザー作成出来ない
概要
Docker環境でMysqlを使用する際、
docker-compose.yml
に記載した環境変数が反映されず、作業ユーザーを作成出来ないエラーに遭遇しました。docker-compose.yml
version: "3.7" services: ~~~省略~~~ db: container_name: db build: context: ./db dockerfile: Dockerfile ports: - ${DB_PORT}:3306 environment: MYSQL_DATABASE: ${DB_NAME} # 作成するデータベース名 MYSQL_USER: ${DB_USER} # 作業ユーザー名→上記データベースの捜査権限をもつ MYSQL_PASSWORD: ${DB_PASS} # 作業ユーザーのパスワード MYSQL_ROOT_PASSWORD: ${ROOT_PASS} # rootユーザーのパスワード TZ: ${TZ} volumes: - db-data:/var/lib/mysql - ./db/mysql/my.cnf:/etc/mysql/conf.d/my.cnf - ./db/mysql/init:/docker-entrypoint-initdb.d - ./log:/var/log/mysql volumes: db-data: driver: localDockerfile
FROM mysql:8.0 EXPOSE 3306そもそもなぜ作業ユーザーを作成するか?
下記記事参照。
・【MySQL】ユーザーの作成方法について解説!原因
前作業でrootユーザーのみでdocker構築をしており、volume機能でデータが永続化していたため、後作業で記述した環境変数が反映されていないというものでした。
ビルドし直しても反映されない!そもそも消えることがないようにvolume機能を使用していたのに・・・
解決
MySQLのデータを初期化
$ docker-compose down --volumes $ docker-compose up -d
down
コマンド時に--volumes
オプションを追記すれば、volumeも一緒に削除されます。
次回up
コマンドで起動すれば、新しいvolumeが再構築されます。
- 投稿日:2020-05-23T05:05:52+09:00
MySQLのINDEX削除に時間が掛かる
経緯
IT後に試験環境に追加したINDEXを削除しようとしたら一向に終わらない。
MySQL 5.6試したこと
MySQLのINDEX削除は絶望的に時間が掛かるらしい
MySQLのALTER TABLEは絶望的に時間が掛かるとの記事が多数。
(INDEX追加はそんなに時間が掛からなかったんだが…)参照可能って話なのにSELECT出来ない。
更新のみ不可って記事を見たので、それなら実行しっぱなしで帰ればいいか…と思ったが、DROP INDEXを走らせて別窓からSELECTを掛けるも帰ってこない。
SHOW PROCESSLISTで実行中の処理を確認するとWaiting for table metadata lock。
参照できるって話ではなかったのか…。とりあえずKILLしてロック解除。テーブルロックを掛けずに実行する方法を探す
ALTER TABLE に ALGORITHM=INPLACE LOCK=NONE を設定すればテーブルロックを掛けずに実行できるらしい。早速実行。
エラーは出ないので成功かと思ったが、SELECTを掛けると結局参照すら不可。解決策
結局夜間帯に裏で実行させて朝終わってることを確認。(解決してない)
50,000件レコードのINDEX削除に8時間かかりました。参考にさせて頂いた記事
InnoDBオンラインDDLについて
mysql 5.6~でのalter tableでやらかさない
そのALTER TABLEがオンラインALTER TABLEかどうかを確かめる方法