c语言sscanf函数的用法是什么
306
2022-11-28
MySQL mysqldump搭建主从复制
实验环境
此次实验的环境如下
MySQL 5.7.30Centos 7.4操作系统账号:mysql数据库复制账号:repl复制格式:基于行的复制
IP地址 | 主从关系 | 复制账号 | 复制格式 |
192.168.179.102 | 主库 | repl | Row-Based |
192.168.179.103 | 从库 | repl | Row-Based |
这节我们的内容为MySQL的复制,MySQL复制有两种形式
基于二进制日志文件位置基于GTID
这节为第一种基于二进制日志文件位置
1. 开启二进制日志功能
无论是使用哪种方式我们都需要启用二进制日志功能
如果未开启则需要在my.cnf文件中加入如下参数,需要重启数据库生效
主库
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockserver-id=1log-bin=/var/lib/mysql/mysql-binsymbolic-links=0log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid
从库
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockserver-id=2symbolic-links=0log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid
我们需要保证server-id不一样,从库使用了read_only参数确保无其他写入,之后重启数据库。
2. 查看UUID是否一致
需要注意的是如果从库是由主库克隆而来,这时的uuid是一样的,这样也会报错
该文件位于daadir的auto.cnf文件中
vim /var/lib/mysql/auto.cnf
如果一样可删除该文件后重新启动数据库即可,这时会生成一个新的文件
3. 建立复制账号
接下来我们建立一个独立的用于复制的账号
主库和从库
mysql> set global validate_password_policy=0;mysql> set global validate_password_length=1;mysql> grant replication slave on *.* to 'repl'@'192.168.179.%' identified by 'repl';mysql> flush privileges;
4. 备份主库
我们通过mysqldump备份主库的文件
主库192.168.179.102
#在还未主从同步的时候创建表来测试,看看主从同步之后该表会不会在从库上面mysql> create database luleidb;Query OK, 1 row affected (0.01 sec)mysql> use luleidb;Database changedmysql> create table test(id int,name varchar(10));Query OK, 0 rows affected (0.02 sec)mysql> insert into test values(1,'lulei');Query OK, 1 row affected (0.01 sec)mysql> commit;Query OK, 0 rows affected (0.00 sec)[root@localhost ~]# mysqldump -S /var/lib/mysql/mysql.sock -uroot -p --all-databases --single-transaction --master-data=2 --set-gtid-purged=off --triggers --events --routines> /tmp/dumpmaster.sqlEnter password: [root@localhost ~]# ll /tmp/dumpmaster.sql -rw-r--r-- 1 root root 851421 Jun 2 20:41 /tmp/dumpmaster.sqlmysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000002 | 779 | | | |+------------------+----------+--------------+------------------+-------------------+[root@localhost ~]# head -n 60 /tmp/dumpmaster.sql -- MySQL dump 10.13 Distrib 5.7.30, for Linux (x86_64)---- Host: localhost Database: -- -------------------------------------------------------- Server version 5.7.30-log/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;---- Position to start replication or point-in-time recovery from---- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=779;---- Current Database: `luleidb`--CREATE DATABASE /*!32312 IF NOT EXISTS*/ `luleidb` /*!40100 DEFAULT CHARACTER SET latin1 */;USE `luleidb`;#可以看到mysqldump当中使用--master-data=2的时候,-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=779;会被注释掉,在pos点779之前已经创建了测试的luleidb库和test表,这部分数据需要使用sqldump导出至从库还原
5. 文件传输
接下来将主库的dump文件传到备份,之后更改备库的文件权限
主库 :192.168.179.102
[root@localhost ~]# scp /tmp/dumpmaster.sql root@192.168.179.103:/tmp/root@192.168.179.103's password: dumpmaster.sql 100% 831KB 16.8MB/s 00:00
从库:192.168.179.103
[root@localhost ~]# chown mysql:mysql /tmp/dumpmaster.sql
6. 备库导入数据
接下来我们将备份的数据导入到备份
[root@localhost ~]# mysql -S /var/lib/mysql/mysql.sock -uroot -p
7.开始同步
接下来我们开启同步首先我们查看dumpmaster.sql文件中master的信息
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=779;
之后使用如下命令开启同步
mysql> change master to -> master_host='192.168.179.102',master_port=3306,master_user='repl',master_password='repl',master_log_file='mysql-bin.000002',master_log_pos=779;Query OK, 0 rows affected, 2 warnings (0.02 sec)mysql> start slave;Query OK, 0 rows affected (0.01 sec)mysql> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.179.102 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 779 Relay_Log_File: localhost-relay-bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 779 Relay_Log_Space: 531 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 18f5da07-a096-11ea-8c70-000c290e1abf Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)
主要关注如下几点
Slave_IO_Running需要为YESSlave_SQL_Running需要为YESSeconds_Behind_Master需要为0
查看主从同步之前创建的库和表是否存在,下面的结果就是为什么要使用--master-data的好处(在pos点之前数据通过mysqldump导出的dumpmaster.sql进行恢复,之后的数据恢复需要从库从指定pos点来同步主库)
#可以看到数据都在mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || luleidb || mysql || mytest || performance_schema || sys |+--------------------+6 rows in set (0.00 sec)mysql> use luleidb;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> show tables;+-------------------+| Tables_in_luleidb |+-------------------+| test |+-------------------+1 row in set (0.00 sec)mysql> select * from test;+------+-------+| id | name |+------+-------+| 1 | lulei |+------+-------+1 row in set (0.00 sec)
8. 重启和重置复制
使用如下命令关闭重启
mysql>stop slave;mysql>start slave;
我们可以独立的重启IO进程或者SQL进程
mysql>stop slave sql_thread;mysql>stop slave io_thread;mysql>start slave io_thread;mysql>start slave sql_thread;
使用如下命令重置复制
mysql>reset slave all;
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~