マイグレーション MySQL 入門 MySQL はもともとオープンソースのリレーショナル データベース管理システムでした。その最初の開発者はスウェーデンの会社 MySQL AB でしたが、2008 年に Sun Microsystems に買収されました。 2009 年に Oracle が Sun Microsystems を買収し、MySQL は Oracle 製品になりました。 これまで、MySQL は、高性能、低コスト、優れた信頼性により最も人気のあるオープンソース データベースとなり、インターネット上の中小規模の Web サイトで広く使用されています。 MySQL は成熟を続けており、Wikipedia、Google、Facebook などのより大規模な Web サイトやアプリケーションで徐々に使用されるようになっています。非常に人気のあるオープンソース ソフトウェア スタック LAMP の「M」は MySQL を指します。 しかし、Oracle に買収された後、Oracle は MySQL の商用バージョンの価格を大幅に引き上げ、別のフリーソフトウェア プロジェクトである OpenSolaris の開発をサポートしなくなりました。その結果、フリーソフトウェア コミュニティは、Oracle が MySQL Community Edition (MySQL の唯一の無料バージョン) のサポートを継続するかどうかについて懸念を抱いていました。MySQL の創設者 Michael Widenius は、MySQL をベースにしたブランチ プロジェクト MariaDB を設立しました。もともと MySQL を使用していた一部のオープンソース ソフトウェアは、徐々に MariaDB や他のデータベースに移行しています。例えば、Wikipediaは2013年にMySQLからMariaDBデータベースに移行することを公式に発表しました[6]。 リレーショナルデータベース リレーショナルデータベース(英: Relational database)は、リレーショナルモデルに基づいて作成されたデータベースであり、集合代数などの数学的な概念と手法を使用してデータベース内のデータを処理し、現実世界のさまざまなエンティティとエンティティ間のさまざまな接続は、リレーショナル モデルによって表現されます。リレーショナル モデルは、1970 年にエドガー コッドによってコッドの 12 の法則とともに初めて提案されました。現在このモデルには批判もありますが、依然としてデータ保存の従来の標準となっています。標準データ クエリ言語 SQL は、リレーショナル データベースに基づく言語です。この言語は、リレーショナル データベース内のデータの取得と操作を実行します。 リレーショナル モデルは、リレーショナル データ構造、リレーショナル操作セット、リレーショナル整合性制約の 3 つの部分で構成されます。 MySQL の機能 MySQL は、次の機能を備えた広く使用されているデータベースです。
MySQL アプリケーション Oracle、DB2、SQL Server などの大規模データベースと比較すると、MySQL には規模が小さい、機能が限られている (MySQL Cluster の機能と効率は比較的劣る) などの独自の欠点がありますが、これによって人気がまったく低下することはありません。一般の個人ユーザーや中小企業にとって、MySQL が提供する機能は十分すぎるほどであり、また、MySQL はオープンソースソフトウェアであるため、総所有コストを大幅に削減できます。 現在、インターネット上で人気の Web サイト アーキテクチャは LAMP (Linux+Apache+MySQL+PHP) です。これは、オペレーティング システムとして Linux、Web サーバーとして Apache、データベースとして MySQL、サーバー側スクリプト インタープリターとして PHP を使用します。 Linux + Apache + MySQL + PHP はすべて無料またはオープンソース ソフトウェア (FLOSS) なので、LAMP を使用すると、費用をかけずに安定した無料の Web サイト システムを構築できます。 MySLQ ストレージ エンジン
プラグイン ストレージ エンジンは、MySQL データベースの最も重要な機能の 1 つです。ユーザーは、アプリケーションのニーズに応じて、データベースの保存方法やインデックス作成方法、トランザクションを使用するかどうかなどを選択できます。 mySQL は、さまざまな分野のデータベース アプリケーションのニーズを満たすために、デフォルトで複数のストレージ エンジンをサポートしています。ユーザーは、さまざまなストレージ エンジンを選択して、柔軟なストレージを提供することで、アプリケーションの効率を向上させることができます。ユーザー設定をカスタマイズし、ニーズに応じて独自のストレージ エンジンを使用することで、最大限のカスタマイズ性を実現できます。 MySQL でよく使用されるストレージ エンジンは、MyISAM、InnoDB、MEMORY、および MERGE です。InnoDB はトランザクション セーフ テーブルを提供しますが、他のストレージ エンジンはトランザクション セーフではないテーブルです。 MyISAM は MySQL のデフォルトのストレージ エンジンです。 MyISAM はトランザクションや外部キーをサポートしていませんが、アクセス速度が速く、トランザクションの整合性を必要としません。 InnoDB ストレージ エンジンは、コミット、ロールバック、クラッシュ回復機能によりトランザクションの安全性を提供します。ただし、MyISAM ストレージ エンジンと比較すると、InnoDB は書き込み効率が低く、データとインデックスを保持するためにより多くのディスク領域を占有します。 MySQL でサポートされている唯一の外部キー ストレージ エンジンは InnoDB です。外部キーを作成する場合、添付テーブルには対応するインデックスが必要です。外部キーを作成すると、サブテーブルにも対応するインデックスが自動的に作成されます。
主に、パフォーマンス、トランザクション、同時実行制御、参照整合性、キャッシュ、障害回復、バックアップと復元などに反映されます。 現在、最も普及しているストレージ エンジンは MyISAM と InnoDB であり、ほとんどの Web アプリケーションでは MyISAM が第一の選択肢となっています。 MyISAM と InnoDB の主な違いは、パフォーマンスとトランザクション制御です。 MyISAM は、初期の ISAM (Indexed Sequential Access Method) の拡張実装です。ISAM は、読み取り頻度が書き込み頻度よりはるかに多い状況に対応するように設計されています。そのため、ISAM およびそれ以降の MyISAM ではトランザクションのサポートは考慮されておらず、トランザクション レコードは必要ありません。ISAM のクエリ効率は非常に優れており、メモリをほとんど消費しません。 MyISAM は ISAM の利点を継承し、時代の変化に対応するための多数の実用的な新機能と関連ツールを提供します。たとえば、同時実行制御を考慮してテーブル レベルのロックが提供されます。 また、MyISAM はテーブルごとに独立したストレージ ファイル (MYD データ ファイルと MYI インデックス ファイル) を使用するため、バックアップとリカバリが非常に便利 (コピーして上書きするだけ) であり、オンライン リカバリもサポートされています。 したがって、アプリケーションがトランザクションを必要とせず、外部キーをサポートせず、基本的な CRUD (作成、削除、変更、クエリ) 操作のみを処理する場合は、MyISAM が最適な選択肢となります。 Linux (CentOS7.5_x86_64) に mysql8.0 をインストールする # mysqlをダウンロード $ wget http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.13-el7-x86_64.tar.gz # 解凍 $ mysql tar -zxvf mysql-8.0.4-rc-linux-glibc2.12-x86_64.tar.gz -C /usr/local # フォルダ名を変更する $ mv mysql-8.0.4-rc-linux-glibc2.12-x86_64/mysql デフォルトの設定ファイル $ vim/etc/my.cnf を追加します。 [クライアント] ポート=3306 ソケット=/tmp/mysql.sock [mysqld] ポート=3306 ユーザー=mysql ソケット=/tmp/mysql.sock ベースディレクトリ=/usr/local/mysql データディレクトリ=/usr/local/mysql/data # mysqlグループを作成 $ groupadd mysql # mysqlユーザーを作成 $ useradd -g mysql mysql # mysqlデータディレクトリを作成 $ mkdir $MYSQL_HOME/data # mysqlを初期化する $ /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ # 初期化エラー bin/mysqld: 共有ライブラリのロード中にエラーが発生しました: libaio.so.1: 共有オブジェクトファイルを開けません: そのようなファイルまたはディレクトリはありません # 解決策: yum install -y libaio # 初期化エラー 2018-07-08T02:53:24.542370Z 0 [System] [MY-010116] /usr/local/mysql/bin/mysqld (mysqld 8.0.4-rc) がプロセス 17745 として起動しています... mysqld: ファイル '/tmp/mysql/data/ibd35qXQ' を作成/書き込みできません (エラーコード: 13 - アクセス権が拒否されました) 2018-07-08T02:53:24.554816Z 1 [エラー] [MY-011066] InnoDB: 一時ファイルを作成できません。エラー番号: 13 2018-07-08T02:53:24.554856Z 1 [エラー] [MY-011066] InnoDB: InnoDB データベースの作成がエラー「一般エラー」により中止されました。再起動する前に、ibdata1 ファイルを削除する必要がある場合があります。 2018-07-08T02:53:24.555000Z 0 [エラー] [MY-010020] データ辞書の初期化に失敗しました。 2018-07-08T02:53:24.555033Z 0 [エラー] [MY-010119] 中止しています 2018-07-08T02:53:24.555919Z 0 [システム] [MY-010910] /usr/local/mysql/bin/mysqld: シャットダウンが完了しました。 # 解決策: /tmp/mysql のディレクトリ権限を変更します $ chown -R mysql:mysql /tmp/mysql # 初期化成功 > 異常がなければ、ログは以下のようになります。MySQLがデフォルトでrootアカウントとパスワードを生成することがわかります: root@localhost:/TI(mjVAs1Ta [root@localhost mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 2019-01-29T10:19:34.023997Z 0 [システム] [MY-013169] [サーバー] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) プロセス 4240 としてサーバーの初期化が進行中です 2019-01-29T10:19:39.764895Z 5 [注記] [MY-010454] [サーバー] root@localhost の一時パスワードが生成されました: /TI(mjVAs1Ta 2019-01-29T10:19:43.041419Z 0 [システム] [MY-013170] [サーバー] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) サーバーの初期化が完了しました # mysql 起動ファイルをシステム初期化ディレクトリにコピーします $ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # mysqlサーバーを起動します $ service mysqld start 基本的なMySQL操作 # mysqlクライアントを使用してmysqlに接続する $ /usr/local/mysql/bin/mysql -u ルート -p パスワード mysql のデフォルトの初期化パスワードを変更します> alter user 'root'@'localhost' identified by 'root'; # ユーザーを作成する CREATE USER 'ユーザー名'@'ホスト名' INDENTIFIED BY 'ユーザーパスワード' > 'jack' によって識別されるユーザー 'jack'@'localhost' を作成します。 # 権限を付与する 'ユーザー名'@'ログイン ホスト' に database.table に対する権限を付与します ['ユーザー パスワード' で識別されます]; > *.* 上のレプリケーションスレーブを 'jack'@'localhost' に付与します。 # 更新 # $ 権限をフラッシュします。 # リモート接続できるように root ユーザーを変更します> update mysql.user set host='%' where user='root'; # mysql で使用されるユーザーを表示します> select user,host from mysql.user; # docker mysql apt-get update の最大接続数を変更する apt-get で vim をインストール vim /etc/mysql/mysql.conf.d/mysqld.cnf 最大接続数=1000 > mysql_native_password で識別されるユーザー 'root'@'%' を 'root' によって変更します。 MySQL クラスタ マスタースレーブ レプリケーション インストール済みのMySQLサーバーを2つ準備する # メインサービスを設定し、次の設定を追加します $ vim /etc/my.cnf # ノードの一意の ID 値 server-id=1 # バイナリログを有効にする log-bin=mysql-bin # 指定されたログ形式は mixed|row|statement です。Mixed が推奨されます。 binlog 形式 = 混合 # ステップ値の自動増加。通常、マスターMySQLサーバーがn台ある場合は、nを入力します(オプション構成) 自動増分_増分=2 # 開始値。通常は、n 番目のマスター MySQL を入力します。これは最初のマスターMySQLです(オプション構成) 自動増分オフセット=1 # mysqlライブラリを無視する(オプション設定) binlog-ignore=mysql # information_schema ライブラリを無視する (オプション) binlog-ignore=情報スキーマ # 同期するデータベース、デフォルトではすべてのデータベース(オプション構成) 複製するDB=db1 # スレーブノード構成 # ノードの一意の ID 値 server-id=2 # バイナリログを有効にする log-bin=mysql-bin # ステップ値の自動増加。通常、マスターMySQLサーバーがn台ある場合は、nを入力します(オプション構成) 自動増分_増分=2 # 開始値。通常は、n 番目のマスター MySQL を入力します。これは最初のマスターMySQLです(オプション構成) 自動増分オフセット=2 # 同期するデータベース、デフォルトではすべてのデータベース(オプション構成) 複製するDB=db1 # マスターのステータス、特に現在のログと場所を確認します> show master status; +------------------+----------+--------------+------------------+------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+------------------+ | mysql-bin.000004 | 1608 | | | | +------------------+----------+--------------+------------------+------------------+ # スレーブノードで次のコマンドを実行します。master_log_fileはshow master statusのfileの値に対応し、master_log_posはpositionの値に対応することに注意してください。>マスターを次のように変更します。 マスターホスト='192.168.79.15', マスターユーザー='root'、 マスターパスワード='root'、 マスターログファイル='mysql-bin.000009', マスターログ位置=0; # スレーブステータスの開始(マスターの変更の監視を開始) > スレーブを起動します。 # スレーブのステータスを確認する> show slave status\G ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.79.15 マスターユーザー: ルート マスターポート: 3306 接続再試行: 60 マスターログファイル:mysql-bin.000009 読み取りマスターログ位置: 863 リレーログファイル: node-6-relay-bin.000002 リレーログ位置: 500 リレーマスターログファイル: mysql-bin.000009 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログポジション: 863 リレーログスペース: 709 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: 0 Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 0 最後のIOエラー: 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバーID: 1 マスター_UUID: 6291c709-23af-11e9-99fb-000c29071862 マスター情報ファイル: mysql.slave_master_info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得済み_Gtid_Set: 実行されたGtidセット: 自動位置: 0 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: マスター公開キーパス: マスター公開キーの取得: 0 # Slave_IO_Running: Yes と Slave_SQL_Running: Yes の両方が yes の場合、マスター スレーブ レプリケーションが正常であることを意味します。# スレーブ ステータスをリセットします。 $ スレーブをリセットします。 #スレーブ状態を一時停止します。 $ スレーブを停止します。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: elementui の el-popover スタイルの変更が有効にならない問題の解決策
>>: Linuxで新しいユーザーを作成し、指定されたディレクトリへの権限を付与する
必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...
Nginx 仮想ドメイン名設定を使用すると、ドメイン名を購入せずに特定のドメイン名を介してローカル ...
mysql5.7.18の解凍版はmysqlサービスを起動します。具体的な内容は以下のとおりです。 1...
最近、Textrea に転送したときに、データが本当に行ごとに保存できるかどうかという問題に遭遇しま...
ローカル開発では、直接アクセスできない静的ファイル リソースのデバッグが必要になる場合があります。こ...
この記事では、Linux 環境の Apache で https サービスを有効にする方法について説明...
オペレーティングシステム: Alibaba Cloud ESC インスタンス centos7.4ソフ...
SSH は Secure Shell の略で、安全な伝送プロトコルです。Ubuntu クライアントは...
目次同一起源ポリシーAjax リクエストの制限: Ajaxは自身のサーバーにのみリクエストを送信でき...
テキストシャドウの紹介CSSでは、 text-shadowプロパティを使用してテキストの影を設定しま...
JavaScriptの服装アルバム切り替え効果(Taobao商品画像切り替えに似ています)、参考ま...
Harbor は、Docker イメージを保存および配布するためのエンタープライズ レベルのレジスト...
実験環境は以下のとおりですここでは、4 台のサーバー (1 台の nginx、負荷用の 2 台の t...
ストアドプロシージャ1. ストアドプロシージャを作成し、グローバル変数を表示する mysql>...
MySQL ビュー簡単に言えば、MySQL ビューは SELECT コマンドを定義するためのショート...