帮忙做宴会的网站,没有网站如何做cps,广告公司怎么宣传自己,万州区建设局官方网站本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》#xff1a;python零基础入门学习 《python运维脚本》#xff1a; python运维脚本实践 《shell》#xff1a;shell学习 《terraform》持续更新中#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8… 本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》python零基础入门学习 《python运维脚本》 python运维脚本实践 《shell》shell学习 《terraform》持续更新中terraform_Aws学习零基础入门到最佳实战 《k8》从问题中去学习k8s 《docker学习》暂未更新 《ceph学习》ceph日常问题解决分享 《日志收集》ELK各种中间件 《运维日常》运维日常 《linux》运维面试100问 《DBA》db的介绍使用mysql、redis、mongodb... 一、mysql主从
1.主库操作
1.主库配置server_id
2.主库开启binlog
3.主库授权从库连接的用户
4.查看binlog信息
5.导出所有数据
2.从库操作
1.从库配置server_id跟主库不一致
2.确认主库授权的用户可以连接主库
3.同步主库数据
4.配置主库信息change master to
5.开启slave
3.主从复制原理
1图解 2文字描述
1从库执行change master to语句然后立即将主库的信息ip、端口等记录到master.info中这个文件就在从库的数据目录下。
2从库执行start slave语句的瞬间会立即生成IO_Thread和SQL_Thread。
3IO_Thread读取master.info文件获取主库的相关信息IP、端口号等。
4IO_Thread连接主库连接层开始验证用户名、密码、端口号、IP等是否合法。
一旦合法主库会立即分配一个dump_thread线程来与IO_Thread进行交互。
5IO_Thread根据master.info中的二进制日志信息向主库的DUMP_Thread线程请求最新的二进制日志。
6DUMP_Thread经过show master status查询如果发现有新的二进制日志就截取新的日志并返回给从库的IO_Thread。
7从库IO_Thread收到主库发来的binlog存储在到TCP_IP缓存中在网络底层返回ACK给主库。
8从库IO_Thread会将二进制日志信息写入到relay-log中。
9从库IO_Thread更新master.info信息重置二进制日志位置点信息。
10从库SQL_Thread读取relay-log.info文件获取上次执行过的relay-log.info位置点。
11根据获取到的位置点SQL_Thread按照位置点往下执行relaylog日志。
12SQL_Thread执行完后更新relay-log.info文件。
13pwrge线程非主从线程把应用过的relay_log定期自动清理
4.主从中涉及到的文件或者线程
1主库
1.binlog主库执行的sql语句
2.dump线程对比binlog是否更新获取新的binlog
2从库
1.IO线程连接主库询问新数据获取新数据
2.SQL线程执行从主库哪来的sql语句
3.relay-log中继日志记录从主库拿过来的binlog
4.master.info记录主库binlog信息会随着同步进行更新
5.relay-log.info记录sql线程执行到了那里下次从哪里开始执行
三、主从复制的搭建
1.主库操作
1配置
[rootdb03 ~]# vim /etc/my.cnf
[mysqld]
server_id1
log_bin/service/mysql/data/mysql-bin[rootdb03 ~]# /etc/init.d/mysqld start
2授权一个用户
mysql grant replication slave on *.* to rep172.16.1.% identified by 123;
Query OK, 0 rows affected (0.03 sec)
3查看binlog信息
mysql show master status;
-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000003 | 326 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)
4导出所有数据
[rootdb03 data]# mysqldump -uroot -p -A --master-data2 --single-transaction /tmp/full.sql[rootdb03 data]# scp /tmp/full.sql 172.16.1.52:/tmp/
2.从库操作
1配置
[rootdb02 ~]# vim /etc/my.cnf
[mysqld]
server_id2[rootdb02 ~]# /etc/init.d/mysqld start
2验证主库用户
[rootdb02 ~]# mysql -urep -p -h172.16.1.53
3同步数据
[rootdb02 ~]# mysql -uroot -p123 /tmp/full.sql
4配置主从
change master to
master_host172.16.1.51,
master_userrep,
master_password123,
master_log_filemysql-bin.000001,
master_log_pos787368;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
5开启线程
mysql start slave;
Query OK, 0 rows affected (0.04 sec)
6查看主从
mysql show slave status\GSlave_IO_Running: YesSlave_SQL_Running: Yes
3.主从数据库出错
1IO线程出错
mysql show slave status\GSlave_IO_Running: NoSlave_SQL_Running: Yesmysql show slave status\GSlave_IO_Running: ConnectingSlave_SQL_Running: Yes#排查思路
1.网络[rootdb02 ~]# ping 172.16.1.53
2.端口[rootdb02 ~]# telnet 172.16.1.53 3306
3.防火墙
4.主从授权的用户错误
5.反向解析skip-name-resolve
6.UUID或server_id相同
2SQL线程出错
mysql show slave status\GSlave_IO_Running: YesSlave_SQL_Running: No#原因
1.主库有的数据从库没有
2.从库有的数据主库没有#处理方式一自欺欺人
1.临时停止同步
mysql stop slave;
2.将同步指针向下移动一个可重复操作
mysql set global sql_slave_skip_counter1;
3.开启同步
mysql start slave;#处理方式二掩耳盗铃
1.编辑配置文件
[rootdb01 ~]# vim /etc/my.cnf
#在[mysqld]标签下添加以下参数
slave-skip-errors1032,1062,1007#处理方式三正解
重新同步数据重新做主从