本当にオンラインこの情報の多くが、ほとんどが不完全であり、いくつかさえプレーンテキスト文字、私の神は、あなたは、この技術が実現する方法を想像テキストにそれらを求めますか?いくつかは、より多くのコピーであると言うと、貼り付けられませピット段賞賛し、再度、彼は元、賞賛他の人のものを取るために持っていた技術で実現しませんでした。
A:MySQLからの同期レプリケーションの主な利点:
1:読み取りと書き込みの分離、簡単にサーバアクセス圧力!より助長システムを報告して下さい!
プライマリマスターは、コピー操作からマスタデータベースの追加および削除され、同時にライブラリからデフォルトのミリ秒のスレーブ同期へのデータ変更は、データが同じであり、そして我々は、プロジェクト内の読み取りおよび書き込み要求で複数のデータソースを処理して分割することができます。追加および削除する場合は、メインのライブラリになります。ほとんどのデータベースはのは、すべての要求がライブラリからここに行く読み聞かせて、検索操作のパフォーマンスのボトルネックの数が多いです。
ライブラリの操作は、メインのライブラリに戻って同期されませんから、私たちはマスター・マルチスレーブの場合には、プロジェクトの開発とテストの生産ラインのデータを分割することができるように。
2:テストと地域開発を促進します。
ダーティデータ問題の深刻なテストライブラリ開発ライブラリを;これは私が完全に理解開発や不便の多くをもたらすに作業をテストします。いくつかのインタフェースは、パフォーマンス上の問題を抱えているが、テスト開発ライブラリデータライブラリの数が少ないだけで再現することはできません。6000万への単一のテーブルに工場受注データの前に、操作がテーブルの上に行く非常に遅いです。インターフェースの開発は細心の注意を払うことです。
3:移行に失敗すると、災害復旧に資する、プランBプログラムは、損失を低減することができます。
短所:
1:生産のコストを増やします!新しいサーバーを追加するには、幹部が明らかに良い案と教えてくれましたが、同社は生産コストの増加を考慮していません。
2:メンテナンスコストは、開発の難易ある程度あります。本当に顔複雑な生産に本番環境へのそれぞれの簡単なデモ、さらに高い開発者にとってとても要件。
マスターはスレーブデータベースに構成サーバー転送要求をコピーすることによって、メインライブラリーから崩壊あるいは使用できないことがあり、binlogのログので、あなたがたは、清掃ないいくつかの誤ったデータが存在します!(アリクラウドログをCSV形式でもOKです)。
2:からの同期レプリケーションの主な原則:
原理は非常に簡単です:
ビン・ログデータベースのバイナリ、すべてのプライマリデータベースレコードのSQLマスター動作により1。
SQL操作の内側2.読むビンログファイル。
3.Slave_IOこのスレッドは、ライブラリ専用のリレー - ログログからの操作ビンログをやり直す書きました。
4.Slave_SQLこのスレッドは、オペレーティングリレーログREDOログは、ライブラリから読み出され、手や足に開始し、ログに応じた動作と述べました。
これは、(個人的な理解は、エラーが発生した場合、私は議論教えてください)同期の基本原理です。
III:レプリケーションマスタ・スレーブ手の実用的な操作:
ここではMySQLデータベースとライブラリから行うことをお使いのMac、Windowsシステム上でショットを呼び出します。2台のマシンが通過ファイアウォールのpingにお互いのgetをオフにしなければならないことに注意してください。主要なメカニズム、そしてどのようなオペレーティングシステムからのMySQLは何の関係もありません、少し鶏の羽は何の関係もなかった、突然の変更ではなく、機能に関係のセントにそれを適合させるために使用されているが、確かにネットワークに存在しますオペレーティングシステムにアップしています関係は、どこのping、彼らは余裕がありません。
(1)Macの主なライブラリ設定:
MySQLのMacがこの場所でシステムを再起動します。あなたは、停止ボタンを押した後、開始を参照してくださいbecomes'll。設定ファイルを変更すると、MySQLを再起動することを忘れないでください。
テストのためのローカルデータベースを着陸オープンITERM
Macのシステム構成ファイルには、固定の/ etc以下に、1を自分で作成していない場合は、Macのシステムは、my.cnfのであり、Windowsのシステム設定ファイルのmysqlのmy.iniがあることを忘れないでください。
作成されていない場合、私はコピーモードプレスを編集し、次のコマンドラインを入力して、構成の以下の長いリストを貼り付けます。
# Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.
# The following options will be passed to all MySQL clients
[client]
default-character-set=utf8
#password = your_password
port = 3306
socket = /tmp/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
character-set-server=utf8
init_connect='SET NAMES utf8
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
character-set-server=utf8
init_connect='SET NAMES utf8'
#skip-networking
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
# binary logging format - mixed recommended
binlog_format=mixed
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1
binlog-do-db=jojotest
# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
# the syntax is:
#
# CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
# MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
# where you replace <host>, <user>, <password> by quoted strings and
# <port> by the master's port number (3306 by default).
#
# Example:
#
# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
# MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
# start replication for the first time (even unsuccessfully, for example
# if you mistyped the password in master-password and the slave fails to
# connect), the slave will create a master.info file, and any later
# change in this file to the variables' values below will be ignored and
# overridden by the content of the master.info file, unless you shutdown
# the slave server, delete master.info and restart the slaver server.
# For that reason, you may want to leave the lines below untouched
# (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id = 2
#
# The replication master for this slave - required
#master-host = <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user = <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password = <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port = <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set=utf8
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
サーバー-idはメイン図書館のサインです、私は繰り返されません覚えています。指定されたデータベースを同期しているのbinlog-DO-DBのbinlogのログ、ここに私のjojotest指定されたデータベースです。
この設定を追加した後のアクセス権限を変更することを忘れないでください:sudoのはchmod 664な/etc/my.cnf
次に、マスター・データベースからの完全な権限をアクセスするためのユーザーを作成します。
注:許可を与えるためにユーザーを作成し、直接できるようにするために使用mysqlの8;それが直接レプリケーションスレーブのON・グラントが実行される。「123456」で識別TO「superman'@'172.80.10.191」;行に、スーパーマンが、ユーザー名、IPアドレスを交換あなたのライブラリーからのIPアドレス!覚えておいてください!文字列の後ろにパスワードです。
8後mysqlのは、あなたが最初に新しいユーザーを作成し、権限を与える必要があり、文句を言うでしょう。
看下新用户是否创建成功了,这里的%代表的是任何主机都可以使用的用户,172.80.10.%则代表172.80.10开头的Host主机都可以使用该用户。指定主机只需要添加对应的IP地址。
show master status 看下master主库的状态;Position是从属数据库要用的,这个值是会变的,第一次配置要FLUSH TABLE WITH READ LOCK;配置好后再unlock tables;配置文件指定同步的数据库(Binlog_do_DB)是否正确;File下面的mysql-bin.000003就是binlog同步日记文件;通过读取这个文件进行同步操作。Binlog_Ignore_DB就是你不需要同步的数据库,比如mysql库那些schema什么的一堆都是我们用不上的数据。
最后,要导出主库这边创建好的数据库和表结构和表数据!拿去从库所在机器上装的mysql跑一遍,不然玩不了同步操作!如果单纯导出表结构那么恭喜你旧的数据全部都没有!记住同步是从当前position开始同步,只会对CURD的SQL语句操作有logbin记录!从库读取再在自己本地CURD,就是那么简单!但是你手动修改主库的数据,手动保存,不用sql语句,那是不会生效的,记住记住!!
(2)Windows 从库配置:
导入.sql文件,命令行用 source 存放路径,其他数据库可视化工具动动鼠标就行,简单吧?
这个文件里装的就是你创建表的语句;记事本打开看一下。
这里如果你直接导入的话,mysql 8 有一个Bug,就是编码问题,显示:MySQL 导入 sql 文件报错 [Err] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci’ 之 类的
解决方法:
把 MySQL8 导出的 SQL 文件用记事本打开,把 utf-8mb4 全部替换为 utf-8,把 utf8mb4_0900_ai_ci 全部替换为 utf8_general_ci 。MySQL8.0.17 以上版本修复了。
下面又到了最讨厌的修改配置文件的时间了。配置文件就是配置一些读写Buffer的大小,读写时间,重试机制,日记格式之类的很多东西,有时间可以仔细研究一下。
改完配置文件还是要重启,Windows的重启如下:
下一步,打开Windows的mysql命令行iterm;写入下面的配置(这些数据都是刚才show master status 显示出来的;ip地址就是你主库那边的IP地址;user和password就是自己刚才定义的%host访问的用户;这里注意密码没设置就不写,不要‘’;空字符串跟null是两个概念):
配置好后start slave; 然后show slave status 看看。它会出来一串东西;包括你设置的主库IP,同步的库名,端口号,主库权限用户等等。但是重点看两个地方。
一个是两个最重要的连接线程是否running:
解释一下,非常重要!
Slave_IO 是binlog日志的通道;就是这条IO把主库CURD操作记录日志传过来。
Slave_SQL 是从库的操作通道;这条线程就是把主库做过的操作,往slave从库动手做了一遍。