Portál AbcLinuxu, 5. května 2025 21:43
nevím jestli to jde, replikovat z třech serverů na jeden server.Není důvod, aby to nešlo, ale všechno je přednastavené tak, že je na jednom serveru jenom jedna MariaDB. Takže ty další dvě instance budete muset hodně přenastavit, aby používaly jiné konfigurační soubory, jiné adresáře pro data atd. A nebo na tom serveru vytvořit tři virtuály a kopírovat to na ně
server_id = 1 gtid_domain_id = 1 report_host = master1.domain.tld log_bin = /var/lib/mysql/binary.log relay_log = /var/lib/mysql/relay.log expire_logs_days = 7 binlog_do_db = databaza_x binlog_do_db = databaza_y binlog_do_db = databaza_z replicate_do_db = falsea vytvoríš používateľa
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `replication`@`ip.tvojho.slave.servera` IDENTIFIED BY PASSWORD 'xyz';samozrejme, pre ďalšie serveri náležite upravíš id-čka, ktoré musia byť jedinečné a ostatné riadky na SLAVE stroji dáš do my.cnf toto
server_id = 1000 gtid_domain_id = 1000 report_host = slave.domain.tld log_bin = /var/lib/mysql/binary.log relay_log = /var/lib/mysql/relay.log expire_logs_days = 7 binlog_do_db = false # master1.domain.tld replicate_do_db = databaza_x replicate_do_db = databaza_y replicate_do_db = databaza_zďalej si treba uvedomiť, že pri vytvorení novej replikácie, respektíve pri jej "rozpadnutí" musíš vždy najprv ručne dumpnuť konkretnú databázu, nahrať ju na slave a až tak zapnúť replikáciu, spravil som si preto následujúce skripty na mastri spustíš toto a riadok čo ti dá na konci spolu vložíš do scriptu na slave do premennej status="", samozrejme skopíruješ aj ten sql dump čo ti vytvorí
#!/bin/bash host="127.0.0.1" user="root" pass="abc" dump="`mysql --host=${host} --user=${user} --password=${pass} --skip-column-names --vertical --execute="show master status;" | tail -n2 | head -n1 | sed "s|,| |g"`" halt="`mysql --host=${host} --user=${user} --password=${pass} --skip-column-names --execute="flush tables with read lock; select sleep(86400);" > /dev/null 2>&1 &`" sleep 5 lock="`mysql --host=${host} --user=${user} --password=${pass} --skip-column-names --execute="show processlist;" | grep -i "select sleep(86400)" | awk '{print $1}'`" mysqldump --host=${host} --user=${user} --password=${pass} --lock-all-tables --hex-blob --events --routines --triggers --result-file=$(hostname).sql --log-error=$(hostname).sqr --databases ${dump} zero="`mysql --host=${host} --user=${user} --password=${pass} --skip-column-names --vertical --execute="reset master;"`" data="`mysql --host=${host} --user=${user} --password=${pass} --skip-column-names --vertical --execute="show master status;" | tail -n4 | head -n3 | xargs`" kill="`mysql --host=${host} --user=${user} --password=${pass} --skip-column-names --vertical --execute="kill ${lock};"`" echo "${data}"slave
#!/bin/bash status="" master_host="master1.domain.tld" master_user="replication" master_pass="xyz" slave_host="127.0.0.1" slave_user="root" slave_pass="123" mysql --host=${slave_host} --user=${slave_user} --password=${slave_pass} --execute="stop slave '${master_host}';" > /dev/null 2>&1 mysql --host=${slave_host} --user=${slave_user} --password=${slave_pass} --execute="reset slave '${master_host}' all;" > /dev/null 2>&1 for db in $(echo "${status}" | cut -d " " -f 3 | sed "s|,| |g"); do echo "Dropping database \"${db}\"" mysqladmin --host=${slave_host} --user=${slave_user} --password=${slave_pass} --force drop ${db} echo done pv ${master_host}.sql | mysql --host=${slave_host} --user=${slave_user} --password=${slave_pass} if [[ $? -ne 0 ]]; then exit 1 fi mysql --host=${slave_host} --user=${slave_user} --password=${slave_pass} --execute="change master '${master_host}' to master_host='$(resolveip -s ${master_host})', master_user='${master_user}', master_password='${master_pass}', master_log_file='$(echo "${status}" | cut -d " " -f 1)', master_log_pos=$(echo "${status}" | cut -d " " -f 2); start slave '${master_host}';" if [[ $? -ne 0 ]]; then exit 1 fiĎalej malé upozornenie, keď máš nejaké pohľady, procedúri, funkcie, tak je vhodné aj na slave vytvoriť používateľov s rovnakými oprávneniami ako na mastri, ktoré používaju Kebyže niečo nechápaš, pýtaj sa
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.