Rumah pangkalan data tutorial mysql 详解centos7下mysql5.6的主从复制的示例代码分享

详解centos7下mysql5.6的主从复制的示例代码分享

Mar 29, 2017 pm 01:41 PM

本篇文章主要介绍了centos7下mysql5.6的主从复制详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、mysql主从复制介绍

mysql的主从复制并不是数据库磁盘上的文件直接拷贝,而是通过逻辑的binlog日志复制到要同步的服务器本地,然后由本地的线程读取日志里面的sql语句,重新应用到mysql数据库中。

mysql数据库支持单向,双向,链式级联,环状等不同业务场景的复制,一台服务器充当主服务器master,接收来自用户的更新,而一个或多个其他服务器充当从服务器slave,接收来自主服务器binlog文件的日志内容,解析出sql,更新到从服务器。

一主一从 (A -> B, A为主,B为从)

一主多从 (A -> B, A -> C, A为主,B与C为从)

双主双向同步 (A -> B , B -> A , A与B同为主,互相备份)

线性级联 (A -> B -> C , A与B主主互备,C为从)

环状级联 (A -> B -> C -> A, A、B、C都为主,各节点都可写入数据)

二、实现mysql主从读写分离的方案

1、通过程序实现读写分离(判断语句关键字,去连接主从数据库)

2、通过开源的软件实现读写分离(mysql-proxy,amoeba,稳定性和功能一般,不建议生产使用)

3、独立开发DAL层软件

三、mysql主从复制原理介绍

mysql主从复制是一个异步的复制过程,将一个主库复制到一个从库,master与slave之间实现整个过程是由三个线程参与完成。其中sql线程与I/O线程在slave端,另一个I/O线程在master端。

复制原理过程

1、在slave上执行start slave命令,开启主从复制开关,开始进行主从复制。

2、slave的I/O线程通过master上已经授权的复制用户请求master,请求指定binlog日志的指定位置。

3、master接收slave的I/O线程的请求后,其自身负责复制的I/O线程会根据slave的请求信息分批读取指定binlog日志的指定位置之后的日志信息,然后返回给slave的I/O线程,返回信息除了binlog日志外,还有master的新binlog文件名称,以及新binlog中的下一个指定更新位置。

4、slave获取来自master上I/O线程发送的binlog日志内容,日志文件及位置点后,会将binlog内容依次写到slave自身的relay log(中继日志)文件尾部,并将新的binlog文件名和位置记录到master-info文件中,以便下次从master读取新binlog日志时,能告诉master从新binlog的新位置读取。

5、slave的sql线程会实时检测本地relay log中I/O线程新增加的日志内容,及时把relay log文件中的内容解析成sql语句,并按解析sql语句的位置顺序执行这些sql语句。relay-log.info中记录当前应用中继日志的文件名及位置点。

四、mysql主从复制操作

我这里是mysql单机多实例,3306、3308、3309

主库为3306,从库为3308,3309

(1)、在master主库上

1、设置server-id值并开启binlog功能

> vi /etc/my.cnf
Salin selepas log masuk
 [mysqld]
 #用于同步的每台机器server-id都不能相同

server-id = 10

log-bin = /data/mysql56/data/mysql-bin
Salin selepas log masuk

2、重启主库

> service mysqld restart
Salin selepas log masuk

3、登陆主库,查看server-id

> mysql -uroot -p

> show variables like 'server_id';
Salin selepas log masuk

4、主库上建立用于从库复制的账号

> grant replication slave on *.* to "rep"@"%" identified by "123456";

> flush privileges;

> select user,host from mysql.user;

> show grants for rep@"%";
Salin selepas log masuk

5、对主库数据库锁表只读(当前窗口不要关掉)

> flush table with read lock;
Salin selepas log masuk

查看主库状态

> show master status;
Salin selepas log masuk

6、备份主库所有数据文件

> mysqldump -uroot -p -A -B | gzip > /data/mysql_bak.$(date +%F).sql.gz
Salin selepas log masuk

7、备份完主库数据后,解锁

> unlock tables;
Salin selepas log masuk

8、把主库导出的数据迁移到从库

(2)、在slave从库上

1、设置server-id值并关闭binlog功能

①有两种情况下需打开binlog

②级联同步A->B->C中间的B,就要开启binlog

③在从库做数据库备份,必须要有全备和binlog日志才是完整备份。

> vi /mysql-instance/3308/my.cnf 

[mysqld]

server-id = 11

relay-log = /mysql-instance/3308/relay-bin

relay-log-info-file = /mysql-instance/3308/relay-log.info
Salin selepas log masuk

2、重启从库

> /mysql-instance/3308/mysql restart
Salin selepas log masuk

3、登陆从库检查参数

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock

> show variables like 'log_bin';

> show variables like 'server_id';
Salin selepas log masuk

4、把主库mysqldump导出的数据恢复到从库

> gzip -d /data/mysql_bak.2017-01-15.sql.gz
Salin selepas log masuk

把主库数据还原到从库

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock < /data/mysql_bak.2017-01-15.sql
Salin selepas log masuk

5、登录从库,配置复制参数

CHANGE MASTER TO

MASTER_HOST=&#39;127.0.0.1&#39;,

MASTER_PORT=3306,

MASTER_USER=&#39;rep&#39;,

MASTER_PASSWORD=&#39;123456&#39;,

MASTER_LOG_FILE=&#39;mysql-bin.000001&#39;,

MASTER_LOG_POS=396;
Salin selepas log masuk

注意上面的MASTER_LOG_FILE和MASTER_LOG_POS是在主库中用show master status;查看的信息。

查看master.info文件

> cat /mysql-instance/3308/data/master.info
Salin selepas log masuk

6、启动从库同步开关,测试主从复制情况

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "start slave;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show slave status\G;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show slave status\G" | egrep "IO_Running|SQL_Running|_Behind_Master"
Salin selepas log masuk

7、测试主从复制

> mysql -uroot -p -e "create database wohehe;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show databases;"
Salin selepas log masuk

五、mysql主从复制线程状态说明及用途

1、主库线程的同步状态

> show processlist\G; 


*************************** 1. row ***************************

   Id: 5

  User: rep

  Host: localhost:47605

   db: NULL

Command: Binlog Dump

  Time: 4728

 State: Master has sent all binlog to slave; waiting for binlog to be updated

  Info: NULL
Salin selepas log masuk

说明主库线程已从binlog读取更新,发送到了从库,线程处理空闲状态,等待binlog的事件更新。

2、从库线程的同频状态

> show processlist\G; 

*************************** 2. row ***************************

   Id: 6

  User: system user

  Host:

   db: NULL

Command: Connect

  Time: 5305

 State: Slave has read all relay log; waiting for the slave I/O thread to update it

  Info: NULL
Salin selepas log masuk

说明从库已读取所有中继日志,等待从库I/O线程的更新。

六、主从复制故障

如果我在从库上创建了一个库,然后去主库创建同名的库,那么这就会冲突了。

> show slave status; 

Slave_IO_Running: Yes

Slave_SQL_Running: No

Seconds_Behind_Master: NULL

Last_Error: Error &#39;Can&#39;t create database &#39;xxxxx&#39;; database exists&#39; on query. Default database: &#39;xxxxx&#39;. Query: &#39;create database xxxxx&#39;
Salin selepas log masuk

对于该冲突解决方法

方法一

> stop slave;

#将同步指针移动下一个,如果多次不同步,可重复操作

> set global sql_slave_skip_counter = 1;

> start slave;
Salin selepas log masuk

方法二

> vi /mysql-instance/3308/my.cnf 

#把可以忽略的错误号事先在配置文件中配置

slave-skip-errors = 1002,1007,1032
Salin selepas log masuk

Atas ialah kandungan terperinci 详解centos7下mysql5.6的主从复制的示例代码分享. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

CentOS7 pelbagai versi alamat muat turun imej dan penerangan versi (termasuk versi Semuanya) CentOS7 pelbagai versi alamat muat turun imej dan penerangan versi (termasuk versi Semuanya) Feb 29, 2024 am 09:20 AM

Semasa memuatkan CentOS-7.0-1406, terdapat banyak versi pilihan Bagi pengguna biasa, mereka tidak tahu yang mana satu untuk dipilih. Berikut adalah pengenalan ringkas: (1) CentOS-xxxx-LiveCD.ios dan CentOS-xxxx- Apa. adakah perbezaan antara bin-DVD.iso? Yang pertama hanya mempunyai 700M, dan yang kedua mempunyai 3.8G. Perbezaannya bukan sahaja dalam saiz, tetapi perbezaan yang lebih penting ialah CentOS-xxxx-LiveCD.ios hanya boleh dimuatkan ke dalam memori dan dijalankan, dan tidak boleh dipasang. Hanya CentOS-xxx-bin-DVD1.iso boleh dipasang pada cakera keras. (2) CentOS-xxx-bin-DVD1.iso, Ce

Langkah-langkah untuk memasuki mod pembaikan kecemasan CentOS 7 Langkah-langkah untuk memasuki mod pembaikan kecemasan CentOS 7 Jan 13, 2024 am 09:36 AM

Buka halaman centos7 dan muncul: selamat datang ke mod kecemasan! afterloggingin, taip "journalctl -xb" untuk melihatsystemlogs, "systemctlreboot" toreboot, "systemctldefault" untuk mencuba semula kebootintodefaultmode. giverootpasswordformaintenance(??Control-D???): Penyelesaian: laksanakan r

Bagaimana untuk mengakses dan membersihkan fail sampah dalam direktori /tmp dalam CentOS 7? Bagaimana untuk mengakses dan membersihkan fail sampah dalam direktori /tmp dalam CentOS 7? Dec 27, 2023 pm 09:10 PM

Terdapat banyak sampah dalam direktori tmp dalam sistem centos7 Jika anda ingin membersihkan sampah, bagaimanakah anda harus melakukannya? Mari kita lihat tutorial terperinci di bawah. Untuk melihat senarai fail dalam direktori fail tmp, laksanakan perintah cdtmp/ untuk beralih kepada direktori fail semasa tmp, dan laksanakan arahan ll untuk melihat senarai fail dalam direktori semasa. Seperti yang ditunjukkan di bawah. Gunakan arahan rm untuk memadam fail Perlu diingatkan bahawa arahan rm memadam fail dari sistem selama-lamanya, adalah disyorkan apabila menggunakan arahan rm, sebaiknya berikan gesaan sebelum memadam fail. Gunakan arahan rm-i nama fail, tunggu pengguna mengesahkan pemadaman (y) atau langkau pemadaman (n), dan sistem akan melakukan operasi yang sepadan. Seperti yang ditunjukkan di bawah.

Bagaimana untuk menetapkan peraturan kata laluan dalam centos7 Bagaimana untuk menetapkan peraturan kata laluan dalam centos7? Bagaimana untuk menetapkan peraturan kata laluan dalam centos7 Bagaimana untuk menetapkan peraturan kata laluan dalam centos7? Jan 07, 2024 pm 01:17 PM

Tetapkan peraturan kata laluan atas sebab keselamatan Tetapkan bilangan hari selepas kata laluan tamat tempoh. Pengguna mesti menukar kata laluan dalam masa beberapa hari. Tetapan ini hanya mempengaruhi pengguna yang dibuat, bukan pengguna sedia ada. Jika menetapkan kepada pengguna sedia ada, jalankan arahan "chage -M (hari) (pengguna)". PASS_MAX_DAYS60#Masa tamat kata laluan PASS_MIN_DAYS3#Masa penukaran kata laluan awal PASS_MIN_LEN8#Panjang kata laluan minimum PASS_WARN_AGE7#Masa segera tamat kata laluan Ulangi penggunaan sekatan kata laluan [root@linuxprobe~]#vi/etc/pam.d/system-15th#nearline-auth

Bagaimana untuk memasang sambungan mbstring di bawah CENTOS7? Bagaimana untuk memasang sambungan mbstring di bawah CENTOS7? Jan 06, 2024 pm 09:59 PM

1.UncaughtError:Calltoundefinedfunctionmb_strlen(); Apabila ralat di atas berlaku, ini bermakna kami belum memasang sambungan mbstring 2. Masukkan direktori pemasangan PHP cd/temp001/php-7.1.0/ext/mbstring 3. Mulakan phpize(; /usr/local/bin /phpize atau /usr/local/php7-abel001/bin/phpize) arahan untuk memasang sambungan php 4../configure--with-php-config=/usr/local/php7-abel

Bagaimana untuk memasang Mysql dalam CentOS7 dan tetapkannya untuk bermula secara automatik semasa but Bagaimana untuk memasang Mysql dalam CentOS7 dan tetapkannya untuk bermula secara automatik semasa but Jun 02, 2023 pm 08:36 PM

Centos7 tidak mempunyai pangkalan data mysql Pangkalan data lalai ialah mariadb (cawangan mysql). Anda boleh memasang pangkalan data mysql secara manual dengan mengikuti langkah-langkah di bawah. 1. Muat turun fail pemasangan rpm wgethttp://repo.mysql.com/mysql-community-release-el7.rpm2 Jalankan rpm untuk memasang rpm-ivhmysql-community-release-el7.rpm. pilihan berikut muncul: dependenciesresolved ==================================

Bagaimana untuk mengubah suai dan menetapkan kekunci pintasan lalai CentOS7? Bagaimana untuk mengubah suai dan menetapkan kekunci pintasan lalai CentOS7? Jan 09, 2024 pm 06:14 PM

Apabila kekunci pintasan lalai bercanggah dengan kekunci perisian yang anda gunakan atau anda perlu menggunakan kekunci pintasan mengikut tabiat anda sendiri, anda perlu mengubah suai dan menetapkan kekunci pintasan lalai Bagaimana untuk mengubah suai kekunci pintasan lalai CentOS7? Mari kita lihat tutorial terperinci di bawah. 1. Mulakan sistem Centos7 dalam mesin maya dan masukkan desktop 2. Klik Applications->System Tools->Settings di sudut kiri atas 3. Masukkan antara muka tetapan dan klik pada peranti item di sebelah kanan. Dan tekan kekunci pintasan untuk ditetapkan pada papan kekunci untuk menukar kekunci pintasannya (perhatikan bahawa beberapa tidak boleh diubah!) 5. Selepas perubahan, seperti yang ditunjukkan di bawah, akhirnya klik Set, supaya tetapan kekunci pintasan pengubahsuaian selesai.

Penjelasan terperinci tentang arahan fail penyahmampatan (zip) di bawah centos7 Penjelasan terperinci tentang arahan fail penyahmampatan (zip) di bawah centos7 Jan 07, 2024 pm 06:30 PM

1. Folder yang dimampatkan ialah fail zip [root@cgls]#zip-rmydata.zipmydata2 Nyahzip mydata.zip ke dalam direktori mydatabak [root@cgls]#unzipmydata.zip-dmydatabak3.mydata01 folder dan mydata02.txt dimampatkan ke dalam. mydata.zip[root@cgls]#zipmydata.zipmydata01mydata02.txt4 Terus nyahmampat fail mydata.zip [root@cgls]#unzipmydata.zip5

See all articles