MySQL 官方 Auto-Failover 功能测试
参考资料: http://www.clusterdb.com/mysql/replication-and-auto-failover-made-easy-with-mysql-utilities 环境介绍: master: demoenv-trial-1 slaves: demoenv-trial-2 demoenv-trial-3 1. 安装 Percona Server,在所有服务器上: $ sudo yum install ht
参考资料:
http://www.clusterdb.com/mysql/replication-and-auto-failover-made-easy-with-mysql-utilities
环境介绍:
master: demoenv-trial-1
slaves: demoenv-trial-2 demoenv-trial-3
1. 安装 Percona Server,在所有服务器上:
$ sudo yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
$ sudo yum install Percona-Server-shared-compat
$ sudo yum install Percona-Server-server-56
$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum install mysql-utilities
2. 配置 /etc/my.cnf,在所有服务器上:
注意:确保 server-id 不同且 report-host 与自身主机名相同
$ sudo vim /etc/my.cnf
[mysqld] # basic setting datadir = /opt/mysql/data tmpdir = /opt/mysql/tmp socket = /opt/mysql/run/mysqld.sock port = 3306 pid-file = /opt/mysql/run/mysqld.pid # innodb setting default-storage-engine = INNODB innodb_file_per_table = 1 log-bin = /opt/mysql/binlogs/bin-log-mysqld log-bin-index = /opt/mysql/binlogs/bin-log-mysqld.index innodb_data_home_dir = /opt/mysql/data innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /opt/mysql/data binlog-do-db = testdb # server id server-id=1 # gtids setting binlog-format = ROW log-slave-updates = true gtid-mode = on enforce-gtid-consistency = true report-host = demoenv-trial-1 report-port = 3306 master-info-repository = TABLE relay-log-info-repository = TABLE sync-master-info = 1 # other settings [mysqld_safe] log-error = /opt/mysql/log/mysqld.log pid-file = /opt/mysql/run/mysqld.pid open-files-limit = 8192 [mysqlhotcopy] interactive-timeout [client] port = 3306 socket = /opt/mysql/run/mysqld.sock default-character-set = utf8
3. 创建所需目录,在所有服务器上:
$ sudo mkdir -p /opt/mysql/{data,tmp,run,binlogs,log}
$ sudo chown mysql:mysql /opt/mysql/{data,tmp,run,binlogs,log}
4. 初始化数据库,在所有服务器上:
$ sudo -i
# su - mysql
$ mysql_install_db --user=mysql --datadir=/opt/mysql/data/
$ exit
# exit
$ sudo /etc/init.d/mysql start
5. 创建授权用户 root@'%' 以便通过 mysqlreplicate 来进行主从复制的配置,在所有服务器上:
$ mysql -uroot
mysql> grant all on *.* to root@'%' identified by 'pass' with grant option; mysql> quit;
6. 创建复制所需的用户,在所有服务器上:
$ mysql -uroot
mysql> grant replication slave on *.* to 'rpl'@'%' identified by 'rpl'; mysql> quit;
7. 配置主从复制,可选择任意一台服务器操作:
[dong.guo@demoenv-trial-1 ~]$ mysql -uroot
mysql> use mysql; mysql> drop user root@'demoenv-trial-1'; mysql> quit;
[dong.guo@demoenv-trial-1 ~]$ mysqlreplicate --master=root:pass@'demoenv-trial-1':3306 --slave=root:pass@'demoenv-trial-2':3306 --rpl-user=rpl:rpl
# master on demoenv-trial-1: ... connected. # slave on demoenv-trial-2: ... connected. # Checking for binary logging on master... # set up replication... # ...done.
[dong.guo@demoenv-trial-1 ~]$ mysqlreplicate --master=root:pass@'demoenv-trial-1':3306 --slave=root:pass@'demoenv-trial-3':3306 --rpl-user=rpl:rpl
# master on demoenv-trial-1: ... connected. # slave on demoenv-trial-3: ... connected. # Checking for binary logging on master... # set up replication... # ...done.
8. 验证主从复制的数据完整性
[dong.guo@demoenv-trial-1 ~]$ mysql -uroot
mysql> create database testdb; mysql> quit;
[dong.guo@demoenv-trial-1 ~]$ mysql -uroot -ppass -h'demoenv-trial-2' -e 'show databases;'
+-------------------+ | Database | +-------------------+ | information_schema| | mysql | | performance_schema| | test | | testdb | +-------------------+
[dong.guo@demoenv-trial-1 ~]$ mysql -uroot -ppass -h'demoenv-trial-3' -e 'show databases;'
+-------------------+ | Database | +-------------------+ | information_schema| | mysql | | performance_schema| | test | | testdb | +-------------------+
[dong.guo@demoenv-trial-1 ~]$ mysqlrplshow --master=rpl:rpl@'demoenv-trial-1':3306 --discover-slaves-login=root:pass;
# master on demoenv-trial-1: ... connected. # Finding slaves for master: demoenv-trial-1:3306 # Replication Topology Graph demoenv-trial-1:3306 (MASTER) | +--- demoenv-trial-2:3306 - (SLAVE) | +--- demoenv-trial-3:3306 - (SLAVE)
[dong.guo@demoenv-trial-1 ~]$ mysqlrplcheck --master=root:pass@'demoenv-trial-1' --slave=root:pass@'demoenv-trial-2'
# master on demoenv-trial-1: ... connected. # slave on demoenv-trial-2: ... connected. Test Description Status --------------------- Checking for binary logging on master [pass] Are there binlog exceptions? [WARN] +--------+--------+-----------+ | server | do_db | ignore_db | +--------+--------+-----------+ | master | testdb | | +--------+--------+-----------+ Replication user exists? [pass] Checking server_id values [pass] Checking server_uuid values [pass] Is slave connected to master? [pass] Check master information file [pass] Checking InnoDB compatibility [pass] Checking storage engines compatibility [pass] Checking lower_case_table_names setting [pass] Checking slave delay (seconds behind master) [pass] # ...done.
9. 关闭 master 测试 auto-failover
[dong.guo@demoenv-trial-1 ~]$ mysqlfailover --master=root:pass@'demoenv-trial-1':3306 --discover-slaves-login=root:pass --rediscover
# Discovering slaves for master at demoenv-trial-1:3306 # Discovering slave at demoenv-trial-2:3306 # Found slave: demoenv-trial-2:3306 # Discovering slave at demoenv-trial-3:3306 # Found slave: demoenv-trial-3:3306 # Checking privileges. # Discovering slaves for master at demoenv-trial-1:3306 MySQL Replication Failover Utility Failover Mode = auto Next Interval = Sun Oct 20 06:58:52 2013 Master Information ------------------ Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB bin-log-mysqld.00000 299 testdb GTID Executed Set 92df196b-3906-11e3-b6b6-000c290d14d7:1 Replication Health Status +-----------------+------+--------+-------+-----------+---------------+ | host | port | role | state | gtid_mode | health | +-----------------+------+--------+-------+-----------+---------------+ | demoenv-trial-1 | 3306 | MASTER | UP | ON | OK | | demoenv-trial-2 | 3306 | SLAVE | UP | ON | OK | | demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK | +-----------------+------+--------+-------+-----------+---------------+ Q-quit R-refresh H-health G-GTID Lists U-UUIDs
然后,执行命令的终端就挂起了,需要另外开启一个终端来关闭master:
[dong.guo@demoenv-trial-1 ~]$ mysqladmin -uroot -ppass shutdown
接着,在刚刚挂起的终端上,可以看到:
Failover starting in 'auto' mode... # Candidate slave demoenv-trial-2:3306 will become the new master. # Checking slaves status (before failover). # Preparing candidate for failover. # Creating replication user if it does not exist. # Stopping slaves. # Performing STOP on all slaves. # Switching slaves to new master. # Disconnecting new master as slave. # Starting slaves. # Performing START on all slaves. # Checking slaves for errors. # Failover complete. # Discovering slaves for master at demoenv-trial-2:3306 Failover console will restart in 5 seconds. MySQL Replication Failover Utility Failover Mode = auto Next Interval = Sun Oct 20 07:01:25 2013 Master Information ------------------ Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB bin-log-mysqld.00000 299 testdb GTID Executed Set 92df196b-3906-11e3-b6b6-000c290d14d7:1 Replication Health Status +-----------------+------+--------+-------+-----------+---------------+ | host | port | role | state | gtid_mode | health | +-----------------+------+--------+-------+-----------+---------------+ | demoenv-trial-2 | 3306 | MASTER | UP | ON | OK | | demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK | +-----------------+------+--------+-------+-----------+---------------+ Q-quit R-refresh H-health G-GTID Lists U-UUIDs
服务器 'demoenv-trial-2' 变成了新的master。
10. 插入数据测试主从复制
[dong.guo@demoenv-trial-2 ~]$ mysql -uroot
mysql> use testdb; Database changed mysql> CREATE TABLE `hostgroup` ( -> `hostgroup_id` tinyint(4) NOT NULL AUTO_INCREMENT, -> `hostgroup_name` char(20) DEFAULT NULL, -> `hostgroup_next` tinyint(4) NOT NULL, -> `colo_name` char(4) NOT NULL, -> PRIMARY KEY (`hostgroup_id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Query OK, 0 rows affected (0.10 sec) mysql> quit;
[dong.guo@demoenv-trial-2 binlogs]$ mysql -uroot -ppass -h'demoenv-trial-3' testdb -e 'show tables;'
+-----------------+ | Tables_in_testdb| +-----------------+ | hostgroup | +-----------------+
11. 尝试将旧的master恢复
[dong.guo@demoenv-trial-1 ~]$ sudo /etc/init.d/mysql start
[dong.guo@demoenv-trial-1 ~]$ mysqlreplicate --master=root:pass@'demoenv-trial-2':3306 --slave=root:pass@'demoenv-trial-1':3306
# master on demoenv-trial-2: ... connected. # slave on demoenv-trial-1: ... connected. # Checking for binary logging on master... # setting up replication... # ...done.
在刚刚挂起的终端上,可以看到:
... Replication Health Status +-----------------+------+--------+-------+-----------+---------------+ | host | port | role | state | gtid_mode | health | +-----------------+------+--------+-------+-----------+---------------+ | demoenv-trial-2 | 3306 | MASTER | UP | ON | OK | | demoenv-trial-1 | 3306 | SLAVE | UP | ON | OK | | demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK | +-----------------+------+--------+-------+-----------+---------------+ Q-quit R-refresh H-health G-GTID Lists U-UUIDs
将旧的master恢复
[dong.guo@demoenv-trial-1 ~]$ mysqlrpladmin --master=root:pass@'demoenv-trial-2':3306 --new-master=root:pass@'demoenv-trial-1':3306 --demote-master --discover-slaves-login=root:pass switchover
# Discovering slaves for master at demoenv-trial-2:3306 # Discovering slave at demoenv-trial-1:3306 # Found slave: demoenv-trial-1:3306 # Discovering slave at demoenv-trial-3:3306 # Found slave: demoenv-trial-3:3306 # Checking privileges. # Performing switchover from master at demoenv-trial-2:3306 to slave at demoenv-trial-1:3306. # Checking candidate slave prerequisites. # Checking slaves configuration to master. # Waiting for slaves to catch up to old master. # Stopping slaves. # Performing STOP on all slaves. # Demoting old master to be a slave to the new master. # Switching slaves to new master. # Starting all slaves. # Performing START on all slaves. # Checking slaves for errors. # Switchover complete. # # Replication Topology Health: +-----------------+------+--------+-------+-----------+---------------+ | host | port | role | state | gtid_mode | health | +-----------------+------+--------+-------+-----------+---------------+ | demoenv-trial-1 | 3306 | MASTER | UP | ON | OK | | demoenv-trial-2 | 3306 | SLAVE | UP | ON | OK | | demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK | +-----------------+------+--------+-------+-----------+---------------+ # ...done.
在刚刚挂起的终端上,可以看到:
MySQL Replication Failover Utility Failover Mode = auto Next Interval = Sun Oct 20 07:30:07 2013 Master Information ------------------ Binary Log File Position Binlog_Do_DB Binlog_Ignore_DB bin-log-mysqld.00000 710 testdb GTID Executed Set 8a58172b-1efd-11e3-8cf1-000c2950fe0c:1 [...] Replication Health Status +-----------------+------+--------+-------+-----------+----------------------------------+ | host | port | role | state | gtid_mode | health | +-----------------+------+--------+-------+-----------+----------------------------------+ | demoenv-trial-2 | 3306 | MASTER | UP | ON | OK | | demoenv-trial-1 | 3306 | SLAVE | UP | WARN | Slave is not connected to master.| | demoenv-trial-3 | 3306 | SLAVE | UP | WARN | Slave is not connected to master.| +-----------------+------+--------+-------+-----------+----------------------------------+ Q-quit R-refresh H-health G-GTID Lists U-UUIDs
可以看到failover在手动恢复了旧的master之后已经停止了工作。
按下Q,然后重启auto-failover:
[dong.guo@demoenv-trial-1 ~]$ mysqlfailover --master=root:pass@'demoenv-trial-1':3306 --discover-slaves-login=root:pass --rediscover
... Replication Health Status +-----------------+------+--------+-------+-----------+---------------+ | host | port | role | state | gtid_mode | health | +-----------------+------+--------+-------+-----------+---------------+ | demoenv-trial-1 | 3306 | MASTER | UP | ON | OK | | demoenv-trial-2 | 3306 | SLAVE | UP | ON | OK | | demoenv-trial-3 | 3306 | SLAVE | UP | ON | OK | +-----------------+------+--------+-------+-----------+---------------+ Q-quit R-refresh H-health G-GTID Lists U-UUIDs
它又可以工作了。
12. 对于 auto-failover 的简短总结:
它包含在mysql-utilities这个软件包中;
它只能工作在MySQL 5.6 版本上,因为需要GITDs的支持;
它可以自动选取一个slave作为新的master,当现有的master死掉以后;
但是它不能自动将旧的master恢复,并且在手动恢复了旧的master之后也会停止工作。
原文地址:MySQL 官方 Auto-Failover 功能测试, 感谢原作者分享。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

MySQL adalah sistem pengurusan pangkalan data relasi sumber terbuka, terutamanya digunakan untuk menyimpan dan mengambil data dengan cepat dan boleh dipercayai. Prinsip kerjanya termasuk permintaan pelanggan, resolusi pertanyaan, pelaksanaan pertanyaan dan hasil pulangan. Contoh penggunaan termasuk membuat jadual, memasukkan dan menanyakan data, dan ciri -ciri canggih seperti Operasi Join. Kesalahan umum melibatkan sintaks SQL, jenis data, dan keizinan, dan cadangan pengoptimuman termasuk penggunaan indeks, pertanyaan yang dioptimumkan, dan pembahagian jadual.

Kedudukan MySQL dalam pangkalan data dan pengaturcaraan sangat penting. Ia adalah sistem pengurusan pangkalan data sumber terbuka yang digunakan secara meluas dalam pelbagai senario aplikasi. 1) MySQL menyediakan fungsi penyimpanan data, organisasi dan pengambilan data yang cekap, sistem sokongan web, mudah alih dan perusahaan. 2) Ia menggunakan seni bina pelanggan-pelayan, menyokong pelbagai enjin penyimpanan dan pengoptimuman indeks. 3) Penggunaan asas termasuk membuat jadual dan memasukkan data, dan penggunaan lanjutan melibatkan pelbagai meja dan pertanyaan kompleks. 4) Soalan -soalan yang sering ditanya seperti kesilapan sintaks SQL dan isu -isu prestasi boleh disahpepijat melalui arahan jelas dan log pertanyaan perlahan. 5) Kaedah pengoptimuman prestasi termasuk penggunaan indeks rasional, pertanyaan yang dioptimumkan dan penggunaan cache. Amalan terbaik termasuk menggunakan urus niaga dan preparedStatemen

Apache menyambung ke pangkalan data memerlukan langkah -langkah berikut: Pasang pemacu pangkalan data. Konfigurasikan fail web.xml untuk membuat kolam sambungan. Buat sumber data JDBC dan tentukan tetapan sambungan. Gunakan API JDBC untuk mengakses pangkalan data dari kod Java, termasuk mendapatkan sambungan, membuat kenyataan, parameter mengikat, melaksanakan pertanyaan atau kemas kini, dan hasil pemprosesan.

MySQL dipilih untuk prestasi, kebolehpercayaan, kemudahan penggunaan, dan sokongan komuniti. 1.MYSQL Menyediakan fungsi penyimpanan dan pengambilan data yang cekap, menyokong pelbagai jenis data dan operasi pertanyaan lanjutan. 2. Mengamalkan seni bina pelanggan-pelayan dan enjin penyimpanan berganda untuk menyokong urus niaga dan pengoptimuman pertanyaan. 3. Mudah digunakan, menyokong pelbagai sistem operasi dan bahasa pengaturcaraan. 4. Mempunyai sokongan komuniti yang kuat dan menyediakan sumber dan penyelesaian yang kaya.

Proses memulakan MySQL di Docker terdiri daripada langkah -langkah berikut: Tarik imej MySQL untuk membuat dan memulakan bekas, tetapkan kata laluan pengguna root, dan memetakan sambungan pengesahan port Buat pangkalan data dan pengguna memberikan semua kebenaran ke pangkalan data

Peranan utama MySQL dalam aplikasi web adalah untuk menyimpan dan mengurus data. 1.MYSQL dengan cekap memproses maklumat pengguna, katalog produk, rekod urus niaga dan data lain. 2. Melalui pertanyaan SQL, pemaju boleh mengekstrak maklumat dari pangkalan data untuk menghasilkan kandungan dinamik. 3.MYSQL berfungsi berdasarkan model klien-pelayan untuk memastikan kelajuan pertanyaan yang boleh diterima.

Laravel adalah rangka kerja PHP untuk membina aplikasi web yang mudah. Ia menyediakan pelbagai ciri yang kuat termasuk: Pemasangan: Pasang Laravel CLI secara global dengan komposer dan buat aplikasi dalam direktori projek. Routing: Tentukan hubungan antara URL dan pengendali dalam laluan/web.php. Lihat: Buat pandangan dalam sumber/pandangan untuk menjadikan antara muka aplikasi. Integrasi Pangkalan Data: Menyediakan integrasi keluar-of-the-box dengan pangkalan data seperti MySQL dan menggunakan penghijrahan untuk membuat dan mengubah suai jadual. Model dan Pengawal: Model mewakili entiti pangkalan data dan proses pengawal permintaan HTTP.

Kunci untuk memasang MySQL dengan elegan adalah untuk menambah repositori MySQL rasmi. Langkah -langkah khusus adalah seperti berikut: Muat turun kekunci GPG rasmi MySQL untuk mencegah serangan pancingan data. Tambah fail repositori MySQL: rpm -uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm kemas kini yum repository cache: yum update mysql: yum pemasangan mysql-server mysql Server.
