যদি মাস্টার এবং স্লেভের মাইএসকিএল প্রতিলিপিটির ভিন্ন ডাটাবেস থাকে তবে কীভাবে মাইএসকিএল ডিবি পুনরায় সিঙ্ক করবেন?


139

মাইএসকিউএল মাস্টারServer1 হিসাবে চলছে । মাইএসকিউএল স্লেভ হিসাবে চলমান ।
Server2

এখন ডিবি প্রতিলিপি মাস্টার থেকে স্লাইভ এ ঘটছে ।

Server2নেটওয়ার্ক থেকে সরানো হয়েছে এবং 1 দিন পরে এটি আবার সংযুক্ত করুন। এর পরে মাস্টার এবং স্লেভে ডাটাবেসে মিল নেই।

মাস্টার থেকে স্লেভে নেওয়া ডিবি পুনরুদ্ধার করার পরে কীভাবে আবার ডিবিটিকে পুনরায় সিঙ্ক করবেন তবে সমস্যাটিও সমাধান হচ্ছে না?

উত্তর:


287

স্ক্র্যাচ থেকে মাস্টার-ক্রীতদাসের প্রতিলিপিটি পুনরায় সিঙ্ক করতে এটি সম্পূর্ণ ধাপে ধাপে পদ্ধতি:

মাস্টারে:

RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

এবং শেষ আদেশের ফলাফলের মানগুলি কোথাও অনুলিপি করুন

ক্লায়েন্টের সাথে সংযোগ বন্ধ না করে (কারণ এটি রিড লকটি প্রকাশ করবে) মাস্টারের ডাম্প পাওয়ার জন্য আদেশটি জারি করে:

mysqldump -u root -p --all-databases > /a/path/mysqldump.sql

ডাম্পটি এখনও শেষ না হলেও, আপনি লকটি ছেড়ে দিতে পারেন। এটি করতে, মাইএসকিউএল ক্লায়েন্টে নিম্নলিখিত কমান্ডটি সম্পাদন করুন:

UNLOCK TABLES;

এখন স্ক্যাম বা আপনার পছন্দসই সরঞ্জামটি ব্যবহার করে ডাম্প ফাইলটি স্লেভের কাছে অনুলিপি করুন।

দাসে:

Mysql এ একটি সংযোগ খুলুন এবং টাইপ করুন:

STOP SLAVE;

এই কনসোল কমান্ডের সাথে মাস্টারের ডেটা ডাম্প লোড করুন:

mysql -uroot -p < mysqldump.sql

সিঙ্ক ক্রীতদাস এবং মাস্টার লগগুলি:

RESET SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;

উপরের ক্ষেত্রগুলির মানগুলি যেখানে আপনি আগে অনুলিপি করেছেন।

শেষ পর্যন্ত, টাইপ করুন:

START SLAVE;

টাইপ করার পরে সবকিছু আবার কাজ করছে কিনা তা পরীক্ষা করতে:

SHOW SLAVE STATUS;

তোমার দেখা উচিত:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

এটাই!


8
আইএনএনওডিবি টাইপড ডাবাটেস এবং অন্যান্য জটিল কলামের ধরণের মতো যেমন বিএলএলও এবং তারিখ সংজ্ঞায়িত করা হয়, আমি নিম্নলিখিত স্যুইচগুলি ব্যবহার করার পরামর্শ দিই:--opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases
কেন পেগা

4
Is RESET_SLAVEপ্রয়োজনীয়? নোট করুন যে এই নির্দেশাবলী প্রতিলিপি ব্যবহারকারী এবং পাসওয়ার্ড পুনরায় সেট করুন, তাই আপনাকে যাঁদের রয়েছে তাদের পুনরায় প্রবেশ করতে হবেCHANGE MASTER TO...
মাইক এস।

25
মাস্টারটিতে mysqldump কল করার সময় যদি আপনি - মাস্টার-ডেটা ফ্ল্যাগ ব্যবহার করেন তবে CHANGE MASTER TO কমান্ডটি ডাম্প ফাইলে লেখা হয় এবং এভাবে ডাম্প ফাইলটি দাসে আমদানির পরে এটি কার্যকর করার ধাপটি সংরক্ষণ করে।
udog

3
না মাস্টার (Percona প্রয়োজন হয় না) লক plusbryan.com/mysql-replication-without-downtime এই আরেকটি সুবিধা এসকিউএল ডাম্প এছাড়াও প্রয়োজনীয় "পরিবর্তন মাস্টার" লাইন (আউট মন্তব্য) দিয়ে আসে
mahemoff

2
এটিকে স্বয়ংক্রিয় করার কোনও উপায় আছে কি?
মেটাফানিয়েল

26

মাইএসকিউএল সাইটে এর জন্য ডকুমেন্টেশনগুলি খুব খারাপভাবে পুরানো এবং পায়ের বন্দুকগুলি (যেমন ইন্টারেক্টিভ_টাইমআউটআউট) দিয়ে ছাঁটা হয়েছে। আপনার মাস্টার রফতানির অংশ হিসাবে লক পড়ুন দিয়ে ফ্ল্যাশ ট্যাবলেট প্রদান করা সাধারণত তখনই বোধগম্য হয় যখন কোনও স্টোরেজ / ফাইল সিস্টেম স্ন্যাপশট যেমন এলভিএম বা জেডএফএসের সাথে সমন্বিত হয়।

যদি আপনি মাইএসকিলডম্প ব্যবহার করতে চলেছেন তবে মানুষের ত্রুটি থেকে রক্ষা করার জন্য - মাস্টার-ডেটা বিকল্পের উপর নির্ভর করতে হবে এবং যত তাড়াতাড়ি সম্ভব মাস্টারের উপর লকগুলি ছেড়ে দেওয়া উচিত।

ধরুন মাস্টারটি 192.168.100.50 এবং স্লেভের 192.168.100.51, প্রতিটি সার্ভারের একটি পৃথক সার্ভার-আইডি কনফিগার করা আছে, মাস্টার বাইনারি লগইন করেছেন এবং দাসটি মাই সিএনএফ-তে কেবল পঠনযোগ্য = 1 রয়েছে

ডাম্পটি আমদানির ঠিক পরে প্রতিলিপি শুরু করতে সক্ষম হওয়ার জন্য, একটি চেঞ্জার মাস্টার কমান্ড জারি করুন তবে লগ ফাইলের নাম এবং অবস্থান বাদ দিন:

slaveserver> CHANGE MASTER TO MASTER_HOST='192.168.100.50', MASTER_USER='replica', MASTER_PASSWORD='asdmk3qwdq1';

দাসটি ব্যবহারের জন্য মাস্টারকে গ্রান্ট জারি করুন:

masterserver> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.100.51' IDENTIFIED BY 'asdmk3qwdq1';

সংক্ষেপণ ব্যবহার করে এবং স্বয়ংক্রিয়ভাবে সঠিক বাইনারি লগ স্থানাঙ্কগুলি ক্যাপচার করে মাস্টারটি (স্ক্রিনে) রফতানি করুন:

mysqldump --master-data --all-databases --flush-privileges | gzip -1 > replication.sql.gz

দাসের প্রতিলিপি.এসকিএল.এল.ডি. ফাইলটি অনুলিপি করুন এবং তারপরে এটি দাসের উপর মাইএসকিউএল চলার উদাহরণে zcat দিয়ে আমদানি করুন:

zcat replication.sql.gz | mysql

দাসকে কমান্ড জারি করে প্রতিলিপি শুরু করুন:

slaveserver> START SLAVE;

মাস্টার হিসাবে একই রুট পাসওয়ার্ড সংরক্ষণ করতে theচ্ছিকভাবে দাসের /root/.my.cnf আপডেট করুন।

আপনি যদি 5.1+ তে থাকেন তবে প্রথমে মাস্টারের বিনলগ_ ফর্ম্যাটটি মিশ্রিত বা ROW এ সেট করা ভাল। সাবধান থাকুন যে সারি লগ করা ইভেন্টগুলি প্রাথমিক কীটির অভাব রয়েছে এমন টেবিলগুলির জন্য ধীর। এটি সাধারণত বিনলগ_ফর্ম্যাট = স্টেটমেন্টের (মাস্টার হিসাবে) বিকল্প (এবং ডিফল্ট) কনফিগারেশনের চেয়ে ভাল, কারণ এটি স্লেভের উপর ভুল ডেটা তৈরি করার সম্ভাবনা কম।

যদি আপনার অবশ্যই ফিল্টার প্রতিরূপ অবশ্যই (তবে সম্ভবত করা উচিত নয়), স্লেভ বিকল্পগুলির সাথে প্রতিলিপি-বন্য-কর-টেবিল = dbname করুন।% বা প্রতিলিপি-বন্য-উপেক্ষা-টেবিল = ব্যাডবিবি%। এবং কেবল বিনলগ_ফর্ম্যাট = সারিতে ব্যবহার করুন

এই প্রক্রিয়াটি মাইএসকিএলডাম্প কমান্ডের সময়কালের জন্য মাস্টারকে একটি বিশ্বব্যাপী লক ধরে রাখবে তবে অন্যথায় মাস্টারকে প্রভাবিত করবে না।

যদি আপনি মাইএসকিএলড্প - মাস্টার-ডেটা - সমস্ত-ডাটাবেসগুলি - সানসেল-লেনদেন ব্যবহার করার জন্য প্রলুব্ধ হন তবে আপনি সম্ভবত মাইএসকিউএল এন্টারপ্রাইজ ব্যাকআপ বা ওপেন সোর্স বাস্তবায়নকে অ্যাক্সট্রব্যাকআপ (সৌজন্যে Percona)


3
আপনি যদি কোনও বিদ্যমান দাসকে কেবল পুনর্নির্মাণ করতে চান তবে কয়েকটি পদক্ষেপ এড়িয়ে আপনি উপরোক্ত প্রক্রিয়াটি অনুসরণ করতে পারেন: গ্রান্ট এবং ম্যানুয়াল পরিবর্তনের মাস্টার কমান্ড
পুরানো

প্রশ্ন 1: উইন্ডোতে, এর সমতুল্য কি হবে zcat? প্রশ্ন 2: mysqldumpপারফরম্যান্সের দিক দিয়ে বড় ডাটাবেসের সাথে এই ভাড়া কীভাবে ? ব্যবহার করতে কোন পথে SELECT INTO OUTFILEএবং LOAD DATAআপনার প্রস্তাবিত প্রক্রিয়ায় সহজে? (যেহেতু তারা সাধারণত দ্রুত পারফর্ম করে)
ইফেদী ওকনকো

STOP SLAVEপ্রক্রিয়া কোথাও প্রয়োজন নেই ?
ডেভিড ভি।

16

আপনি সরাসরি ক্রীতদাসে (সার্ভার 2) না লিখলে একমাত্র সমস্যাটি হওয়া উচিত যে সার্ভার 2 সংযোগ বিচ্ছিন্ন হওয়ার পরে ঘটে যাওয়া কোনও আপডেট মিস করছে। "দাসত্ব শুরু করুন" দিয়ে কেবল দাসটিকে পুনরায় চালু করা; গতিতে ফিরে আসা উচিত।


2
আপনি বিন লগগুলি পরীক্ষা করে দেখতে পারেন যে আপনার সিস্টেমে সিঙ্কটি শেষ না হওয়ার সময়কালে তারা কী সময়কাল কভার করে। যদি আপনি দিনগুলি অনুপস্থিত থাকেন তবে এটি আরও বড় সমস্যা হতে পারে এবং হারিয়ে যাওয়া ডেটা পুনরুদ্ধার করার জন্য আপনাকে একটি পূর্ণ ডাম্প করা দরকার।
নেলাও

7

আমি মনে করি, মাটকিট ইউটিটগুলি আপনার জন্য সহায়তা করে! আপনি এমকে-টেবিল-সিঙ্ক ব্যবহার করতে পারেন। দয়া করে এই লিঙ্কটি দেখুন: http://www.maatkit.org/doc/mk-table-sync.html


আমি মনে করি স্ক্রিপ্টটি চলাকালীন তাকে সাময়িকভাবে লেখাগুলি থামানো দরকার।
Ztyx

এটি এখনও দুর্দান্ত কাজ করে। যদিও সরঞ্জামগুলির নামকরণ করা হয়েছে এবং এটি এখন পিটি-টেবিল-সিঙ্ক হয়। আসলে, যদিও, আমি খুঁজে পেয়েছি যে তাদের পিটি-ক্রীতদাস-পুনঃসূচনা সরঞ্জাম যাদুটির মতো কাজ করে।
ম্লারলি

7

আমি এই প্রশ্নের খুব দেরি করছি, তবে আমি এই সমস্যার মুখোমুখি হয়েছি এবং অনেক অনুসন্ধানের পরে আমি ব্রায়ান কেনেডি থেকে এই তথ্যটি পেয়েছি: http://plusbryan.com/mysql-replication-without-downtime

মাস্টার এ এর ​​মতো একটি ব্যাকআপ নিন:
মাইসকিल्डম্প - স্কিপ-লক-টেবিলগুলি - একসেল-লেনদেন - ফ্লাশ-লগস - হেক্স-ব্লব - মাস্টার-ডেটা = 2-এ> dump / ডাম্প.এসকিউএল

এখন, ফাইলের প্রধান পরীক্ষা করুন এবং MASTER_LOG_FILE এবং MASTER_LOG_POS এর মানগুলি লিখুন। আপনার পরে এগুলির প্রয়োজন হবে: হেড ডাম্প.এসকিএল -n80 | গ্রেপ "MASTER_LOG"

"ডাম্প.এসকিউএল" ফাইলটি স্লেভের কাছে অনুলিপি করুন এবং এটি পুনরুদ্ধার করুন: mysql -u mysql-user -p <~ / dump.sql

স্লেভ মাইএসকিএল-এর সাথে সংযোগ স্থাপন করুন এবং এর মতো একটি কমান্ড চালান: মাস্টার থেকে MASTER_HOST = 'মাস্টার-সার্ভার-আইপি', MASTER_USER = 'প্রতিলিপি-ব্যবহারকারী', MASTER_PASSWORD = 'স্লেভ-সার্ভার-পাসওয়ার্ড', MASTER_LOG_FILE = 'উপরে থেকে মান', MASTER_LOG_POS = উপরে থেকে মান; দাস শুরু;

স্লেভের অগ্রগতি পরীক্ষা করতে: স্লেভ স্ট্যাটাস দেখান;

যদি সবকিছু ঠিকঠাক হয় তবে লাস্ট_আররর ফাঁকা থাকবে এবং স্লেভ_আইও_সেটেট রিপোর্ট করবে "ইভেন্ট পাঠানোর জন্য মাস্টার অপেক্ষা করছে" ” সেকেন্ড_বিহাইন্ড_মাস্টার সন্ধান করুন যা ইঙ্গিত করে যে এটি কত পিছনে রয়েছে। YMMV। :)


3
এটি কাজ করে এবং যদি দাসটি ইতিমধ্যে সেট আপ হয়ে থাকে এবং কেবল সিঙ্কের বাইরে চলে যায় তবে আপনার চেস্ট মাস্টার চালানোর দরকার নেই; সুনির্দিষ্ট করুন --master-data=1(বা কেবল --master-data)
এলসার্নি

5

একটি মাইএসকিএল ক্রীতদাস সিঙ্ক থেকে বেরিয়ে আসার পরে আমি সাধারণত এটি করি। আমি এম কে-টেবিল-সিঙ্কের দিকে তাকিয়েছি কিন্তু ভেবেছি ঝুঁকি বিভাগটি ভয়ঙ্কর দেখাচ্ছে।

মাস্টার উপর:

SHOW MASTER STATUS

আউটপুটযুক্ত কলামগুলি (ফাইল, অবস্থান) কিছুটা হলেও আমাদের কাজে আসবে।

দাসে:

STOP SLAVE

তারপরে মাস্টার ডিবি ডাম্প করুন এবং এটি স্লেভ ডিবিতে আমদানি করুন।

তারপরে নিম্নলিখিতটি চালান:

CHANGE MASTER TO
  MASTER_LOG_FILE='[File]',
  MASTER_LOG_POS=[Position];
START SLAVE;

[ফাইল] এবং [অবস্থান] যেখানে উপরের "শো মাস্টার পরিস্থিতি" থেকে আউটপুট করা মান।

আশাকরি এটা সাহায্য করবে!


5
এটি ভাঙ্গা বলে মনে হচ্ছে, যেহেতু আপাতদৃষ্টিতে আপনি FLUSH TABLES WITH READ LOCK;আগে নন SHOW MASTER STATUSএবং মাস্টার ডাটাবেসটি ডাম্প করেন। আমি মনে করি এর ফলস্বরূপ দাসের উপর নকল কীগুলি ত্রুটি হতে পারে যেহেতু আপনি কার্যকরভাবে ডাম্প নেওয়ার আগে একটি স্থানে মাস্টার স্ট্যাটাস কার্যকরভাবে সেট করেছিলেন, সুতরাং আপনি ইতিমধ্যে ডাম্পের অন্তর্ভুক্ত ইতিহাসটি পুনরায় খেলবেন। (আপনি যদি বর্ণিত ক্রমে জিনিসগুলি করেন তবে)
KajMagnus


3

কখনও কখনও আপনার কেবল দাসকে একটি লাথিও দেওয়া দরকার

চেষ্টা

stop slave;    
reset slave;    
start slave;    
show slave status;

প্রায়শই, দাস, তারা কেবল আটকে যায় ছেলেরা :)


... এবং স্লেভ ব্যবহার Positionকরে show master status;বিপরীতে ব্যবহার করে মাস্টারটি পর্যবেক্ষণ করুন । দাসটি মাস্টারের কাছে ধরা উচিত। একটি সংক্ষিপ্ত নেটওয়ার্ক আউটেজের ঠিক পরেই এখন MySQL 5.6 ব্যবহার করে আমার জন্য কাজ করেছেন। Exec_Master_Log_Pos:show slave status \G
মাইক এস

10
এটি বিভ্রান্তিমূলক, একবার আপনি ক্রীতদাসকে পুনরায় সেট করার পরে, সলভ মাস্টার কোথায় তা সম্পর্কে সম্পূর্ণ জ্ঞান হারিয়ে ফেলে।
কিয়ান চেন

2

এখানে একটি সম্পূর্ণ উত্তর যা আশা করি অন্যদের সহায়তা করবে ...


আমি মাস্টার এবং স্লেভ ব্যবহার করে মাইএসকিএল প্রতিলিপি সেটআপ করতে চাই এবং যেহেতু আমি কেবল জানতাম তা হ'ল এটি লগ ফাইল (গুলি) সিঙ্ক্রোনাইজ করার জন্য ব্যবহার করে, যদি স্লেভ অফলাইন হয়ে যায় এবং সিঙ্কের বাইরে চলে যায়, তাত্ত্বিকভাবে এটি কেবল ফিরে সংযোগের প্রয়োজন এর মাস্টারকে এবং লগ ফাইলটি যেখানেই ছেড়ে গেছে সেখান থেকে পড়তে থাকুন, যেমনটি ব্যবহারকারী ম্যালনসো উল্লেখ করেছেন।

সুতরাং এখানে মাস্টার এবং স্লেভকে কনফিগার করার পরে পরীক্ষার ফলাফল দেওয়া হয়েছে: http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html ...

আপনি যদি প্রস্তাবিত মাস্টার / স্লেভ কনফিগারেশন ব্যবহার করেন এবং ক্রীতদাসকে লেখেন না তবে তিনি এবং আমি যেখানে ঠিক (মাইএসকিএল-সার্ভার 5.x সম্পর্কিত)। এমনকি "স্ট্লেভ স্টার্ট;" ব্যবহার করার দরকার নেই, এটি কেবল তার মাস্টারের কাছে ধরা পড়ে। তবে এখানে একটি ডিফল্ট ৮৮০০০ কিছু প্রতি second০ সেকেন্ডে আবার চেষ্টা করে তাই আমি অনুমান করি যদি আপনি নিঃশেষিত হন যে আপনাকে দাসটি শুরু করতে বা পুনরায় চালু করতে হতে পারে। যাইহোক, আমার মত যারা যারা জানতে চেয়েছিলেন যে কোনও দাস অফলাইনে যাচ্ছে এবং আবার ব্যাক আপ নেওয়া হয়েছে তার জন্য ম্যানুয়াল হস্তক্ষেপ দরকার .. না, এটি হয় না।

লগ-ফাইলগুলিতে আসল পোস্টারটিতে দুর্নীতি হতে পারে? তবে সম্ভবত কোনও সার্ভারই ​​একদিনের জন্য অফ-লাইন যাচ্ছে না।


/usr/share/doc/mysql-server-5.1/README.Debian.gz থেকে টানা যা সম্ভবত নন ডেবিয়ান সার্ভারগুলিতেও বোধগম্য হয়:

* রেপ্লিকেশন উপর আরও নোট
===============================
মাইএসকিউএল সার্ভারটি যদি প্রতিলিপি দাস হিসাবে কাজ করে তবে আপনার উচিত হবে না
--tmpdir মেমরি-ভিত্তিক ফাইল সিস্টেমের ডিরেক্টরিতে বা ডিরেক্টরিতে নির্দেশ করতে
একটি ডিরেক্টরি যা সার্ভার হোস্ট পুনঃসূচনা হলে সাফ হয়ে যায়। একটি প্রতিলিপি
মেশিনটি পুনরায় চালু হওয়ার জন্য দাসের কিছু অস্থায়ী ফাইলের প্রয়োজন
যে এটি অস্থায়ী সারণী বা লোড ডেটা ইনফিল অপারেশনগুলির প্রতিরূপ তৈরি করতে পারে। যদি
সার্ভার পুনরায় চালু হওয়ার সাথে অস্থায়ী ফাইল ডিরেক্টরি ফাইলগুলি হারিয়ে যায়,
প্রতিরূপ ব্যর্থ।

আপনি স্কয়ারের মতো কিছু ব্যবহার করতে পারেন: 'tmpdir' এর মতো ভেরিয়েবলগুলি দেখান; খুঁজে বের করতে.


উভয় ডাটাবেস একে অপরের মধ্যে স্বয়ংক্রিয়ভাবে সিঙ্ক হবে? যেমন আমি মাস্টারকে লিখি, স্লেভ কি স্বয়ংক্রিয়ভাবে আপডেট হবে?
ট্রান্সফর্মবাইনারি

2

এই ত্রুটিটি অন্তর্ভুক্ত করার জন্য জনপ্রিয় উত্তরে যুক্ত করা:

"ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO",

এক গোলায় দাসের প্রতিলিপি:

একটি টার্মিনাল উইন্ডোতে:

mysql -h <Master_IP_Address> -uroot -p

সংযোগের পরে,

RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

স্থিতিটি নীচে প্রদর্শিত হবে: নোট করুন যে অবস্থানের নম্বরটি পরিবর্তিত হয়!

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      98  | your_DB      |                  |
+------------------+----------+--------------+------------------+

তিনি " অন্য টার্মিনাল ব্যবহার করে " বর্ণনা করেছিলেন কীভাবে ডাম্প রফতানি করুন !

প্রস্থান করুন এবং আপনার নিজের ডিবিতে সংযোগ করুন (যা ক্রীতদাস):

mysql -u root -p

নীচের কমান্ডগুলি টাইপ করুন:

STOP SLAVE;

উল্লিখিত হিসাবে ডাম্পটি আমদানি করুন (অবশ্যই অন্য টার্মিনালে!) এবং নীচের কমান্ডগুলি টাইপ করুন:

RESET SLAVE;
CHANGE MASTER TO 
  MASTER_HOST = 'Master_IP_Address', 
  MASTER_USER = 'your_Master_user', // usually the "root" user
  MASTER_PASSWORD = 'Your_MasterDB_Password', 
  MASTER_PORT = 3306, 
  MASTER_LOG_FILE = 'mysql-bin.000001', 
  MASTER_LOG_POS = 98; // In this case

একবার লগইন হয়ে গেলে সার্ভার_আইডি প্যারামিটার সেট করুন (সাধারণত, নতুন / অ-প্রতিলিপিযুক্ত ডিবিগুলির জন্য, এটি ডিফল্টরূপে সেট করা হয় না),

set global server_id=4000;

এখন, দাস শুরু করুন।

START SLAVE;
SHOW SLAVE STATUS\G;

আউটপুট তার বর্ণনার মতোই হওয়া উচিত।

  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

দ্রষ্টব্য: একবার প্রতিলিপি করা হলে, মাস্টার এবং স্লেভ একই পাসওয়ার্ড ভাগ করে নিন!


উভয় ডাটাবেস একে অপরের মধ্যে স্বয়ংক্রিয়ভাবে সিঙ্ক হবে? যেমন আমি মাস্টারকে লিখি, স্লেভ কি স্বয়ংক্রিয়ভাবে আপডেট হবে?
ট্রান্সফর্মবাইনারি

1

এলভিএম ব্যবহার করে দাসটিকে পুনর্নির্মাণ করা হচ্ছে

লিনাক্স এলভিএম ব্যবহার করে আমরা মাইএসকিউএল ক্রীতদাসগুলি পুনর্নির্মাণের জন্য এই পদ্ধতিটি ব্যবহার করি। আপনার মাস্টারে খুব কম ন্যূনতম ডাউনটাইমের প্রয়োজন হলে এটি একটি সামঞ্জস্যপূর্ণ স্ন্যাপশটের গ্যারান্টি দেয়।

মাস্টার মাইএসকিউএল সার্ভারে ইনোডাব সর্বাধিক নোংরা পৃষ্ঠাগুলি শতাংশ শূন্যে সেট করুন। এটি মাইএসকিউএলকে ডিস্কে সমস্ত পৃষ্ঠাগুলি লিখতে বাধ্য করবে যা পুনরায় আরম্ভের ক্ষেত্রে উল্লেখযোগ্যভাবে গতি আনবে।

set global innodb_max_dirty_pages_pct = 0;

নোংরা পৃষ্ঠাগুলির সংখ্যা নিরীক্ষণ করতে কমান্ডটি চালান

mysqladmin ext -i10 | grep dirty

একবার সংখ্যা হ্রাস বন্ধ হয়ে গেলে আপনি চালিয়ে যাওয়ার পয়েন্টে পৌঁছে যান। পুরানো বিন লগগুলি / রিলে লগগুলি সাফ করতে পরবর্তী মাস্টারটিকে পুনরায় সেট করুন:

RESET MASTER;

এলভি পাথ পেতে lvdisplay সম্পাদন করুন

lvdisplay

আউটপুট এর মত দেখতে হবে

--- Logical volume ---
LV Path                /dev/vg_mysql/lv_data
LV Name                lv_data
VG Name                vg_mysql

কমান্ড দিয়ে মাস্টার ডাটাবেস বন্ধ করুন

service mysql stop

এরপরে একটি স্ন্যাপশট নিন, mysql_snaphot হবে নতুন লজিকাল ভলিউমের নাম। ওএস ড্রাইভে যদি বিনলোগগুলি স্থান করে থাকে তবে সেগুলি স্ন্যাপশটও হওয়া দরকার।

lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data

কমান্ড দিয়ে আবার মাস্টার শুরু করুন

service mysql start

মলিন পৃষ্ঠাগুলিকে ডিফল্টে পুনরুদ্ধার করুন

set global innodb_max_dirty_pages_pct = 75;

স্ন্যাপশটটি সেখানে উপস্থিত এবং দৃশ্যমান তা নিশ্চিত করতে আবার lvdisplay চালান

lvdisplay

আউটপুট:

--- Logical volume ---
LV Path                /dev/vg_mysql/mysql_snapshot
LV Name                mysql_snapshot
VG Name                vg_mysql

স্ন্যাপশট মাউন্ট করুন

mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot

আপনার যদি বিদ্যমান মাইএসকিউএল স্লেভ চলমান থাকে তবে আপনার এটি বন্ধ করা দরকার

service mysql stop

এর পরে আপনাকে মাইএসকিউএল ডেটা ফোল্ডার সাফ করতে হবে

cd /var/lib/mysql
rm -fr *

মাস্টার ফিরে। এখন স্ন্যাপশটটি মাইএসকিউএল স্লেভ-এ সজ্জিত করুন

rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/

আরএসসিএনসি শেষ হয়ে গেলে আপনি স্ন্যাপশটটি আনমাউন্ট করে মুছে ফেলতে পারেন

umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot

যদি পুরানো প্রতিলিপি ব্যবহারকারীর উপস্থিতি বা পাসওয়ার্ড অজানা থাকে তবে মাস্টারে প্রতিলিপি ব্যবহারকারী তৈরি করুন

GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';

/ Var / lib / mysql ডেটা ফাইলগুলি mysql ব্যবহারকারীর মালিকানাধীন রয়েছে কিনা তা যাচাই করুন যদি আপনি নীচের আদেশটি বাদ দিতে পারেন:

chown -R mysql:mysql /var/lib/mysql

এরপরে বিনলগ অবস্থান রেকর্ড করুন

ls -laF | grep mysql-bin

এরকম কিছু দেখতে পাবেন

..
-rw-rw----     1 mysql mysql  1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw----     1 mysql mysql  1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw----     1 mysql mysql   963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw----     1 mysql mysql    65657162 Aug 28 16:44 mysql-bin.000020

এখানে মাস্টার লগ ফাইলটি সিকোয়েন্সের সর্বোচ্চ ফাইল নম্বর এবং বিন লগ অবস্থান ফাইলের আকার। এই মানগুলি রেকর্ড করুন:

master_log_file=mysql-bin.000020
master_log_post=65657162

পরবর্তী স্লেভ মাইএসকিউএল শুরু করুন

service mysql start

নিম্নলিখিতটি সম্পাদন করে দাসের উপর মাস্টার কমান্ড পরিবর্তন করুন:

CHANGE MASTER TO 
master_host="10.0.0.12", 
master_user="replication", 
master_password="YourPass", 
master_log_file="mysql-bin.000020", 
master_log_pos=65657162; 

অবশেষে দাসটি শুরু করুন

SLAVE START;

দাসের স্থিতি পরীক্ষা করুন:

SHOW SLAVE STATUS;

নিশ্চিত করুন যে স্লেভ আইও চলছে এবং কোনও সংযোগের ত্রুটি নেই। শুভকামনা!

বিআর, জুহা ভেহনিয়া

আমি সম্প্রতি আমার ব্লগে এটি লিখেছিলাম যা এখানে পাওয়া যায় ... সেখানে আরও কয়েকটি বিশদ রয়েছে তবে গল্পটি একই।

http://www.juhavehnia.com/2015/05/rebuilding-mysql-slave-using-linux-lvm.html


0

এই সমস্যাটি দ্রুত সমাধান করার জন্য আমি একটি স্ক্রিপ্ট সহ একটি গিটহাব রেপো তৈরি করেছি। কেবল কয়েকটি ভেরিয়েবল পরিবর্তন করুন এবং এটি চালান (প্রথমত, স্ক্রিপ্টটি আপনার ডাটাবেসের একটি ব্যাকআপ তৈরি করে)।

আমি আশা করি এটি আপনাকে (এবং অন্যরাও লোকদের) সহায়তা করবে।

কীভাবে পুনরায় সেট করবেন (পুনরায় সিঙ্ক করুন) মাইএসকিউএল মাস্টার-স্লেভ প্রতিলিপি


আমি স্ক্রিপ্টটি সর্বদা মাস্টার লগ অবস্থান 1 এবং মাস্টার লগ ফাইলের নাম সেট করে দেখছি। আমি এই সম্পর্কে উদ্বিগ্ন হওয়া উচিত কিনা তা নিশ্চিত হওয়ার পক্ষে যথেষ্ট আমি জানি না। আপনি ব্যাখ্যা করতে পারেন? আমার বর্তমানে এক হাজারেরও বেশি অবস্থান রয়েছে। এর অর্থ কী গতিতে ওঠার আগে এটি 1 মিল প্রশ্নগুলি পুনরায় খেলতে চেষ্টা করবে? বিদ্যমান তথ্যগুলির বিরুদ্ধে এই প্রশ্নগুলি খেলতে কি দুর্নীতির সম্ভাবনা নেই? আমি ভাবছি স্ক্রিপ্টে কেন মাইএসকিএল ডাম্প করার সময় --master-data = 2 বিকল্পটি ব্যবহার করুন এবং তারপরে ফাইলটি টানুন এবং সেগুলি সেট করার জন্য ডাম্পের বাইরে রেখে দিন?
জোশিয়াহ

0

আমরা মাইএসকিউএলের মাস্টার-মাস্টার প্রতিলিপি কৌশলটি ব্যবহার করছি এবং যদি কোনও মাইএসকিউএল সার্ভার বলে যে 1টি নেটওয়ার্ক থেকে সরিয়ে ফেলা হয় তবে সংযোগটি পুনরুদ্ধার হওয়ার পরে এটি নিজেকে পুনরায় সংযুক্ত করে এবং সার্ভার 2-এ সংঘটিত সমস্ত রেকর্ড যা নেটওয়ার্কে ছিল তা স্থানান্তরিত হয় সার্ভার 1 এ পুনরুদ্ধারের পরে সংযোগটি হারিয়েছে। মাইএসকিউএলে স্লেভ থ্রেড ডিফল্টরূপে প্রতি 60 সেকেন্ডের পরে তার মাস্টারের সাথে সংযোগ স্থাপনের চেষ্টা করে। এই বৈশিষ্ট্যটি মাইএসকিউএল হ্যাঁ একটি পতাকা "মাস্টার_কনেক্ট_রেট্রি = 5" হিসাবে পরিবর্তন করা যেতে পারে যেখানে 5 সেকেন্ডে রয়েছে। এর অর্থ হল যে আমরা প্রতি 5 সেকেন্ডের পরে আবার চেষ্টা করতে চাই।

তবে আপনাকে অবশ্যই এটি নিশ্চিত করতে হবে যে সংযোগটি হারিয়েছে এমন সার্ভারটি ডুপ্লিকেট পাওয়ার সাথে সাথে ডাটাবেজে কোনও প্রতিশ্রুতি না দেয় কী ত্রুটি কোড: 1062


0

মাস্টার :

mysqldump -u root -p --all-databases --master-data | gzip > /tmp/dump.sql.gz  

scp master:/tmp/dump.sql.gz slave:/tmp/ ডাম্প ফাইলটি স্লেভ সার্ভারে সরান

ক্রীতদাস:

STOP SLAVE;

zcat /tmp/dump.sql.gz | mysql -u root -p

START SLAVE;
SHOW SLAVE STATUS;  

দ্রষ্টব্য : দাস সমস্যার ক্ষেত্রে আপনি তিন দিনের জন্য বিনলগ রাখতে
চালাতে পারেন SET GLOBAL expire_logs_days = 3

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.