IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql主从数据库配置 -> 正文阅读

[大数据]mysql主从数据库配置

原理:将主服务器的binlog日志复制到从服务器上执行一遍,达到主从数据的一致状态
过程:从库开启一个I/O线程,向主库请求Binlog日志。主节点开启一个binlog dump线程,检查自己的二进制日志,并发送给从节点;从库将接收到的数据保存到中继日志(Relay log)中,另外开启一个SQL线程,把Relay中的操作在自身机器上执行一遍
优点:作为备用数据库,并且不影响业务。可做读写分离,一般是一个写库,一个或多个读库,分布在不同的服务器上,充分发挥服务器和数据库的性能,但要保证数据的一致性
————————————————

参考:https://blog.csdn.net/weixin_44393420/article/details/110722753

1、主库

  • 修改my.cnf文件,在[mysqld]加入下面的内容:
# 服务的唯一编号
server-id = 1

# 开启mysql binlog功能
log-bin = mysql-bin

# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW

# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal

# 指定需要复制的数据库名为jgyw
binlog-do-db = furniture_store
  • 修改好配置文件,重启mysql服务
systemctl restart mysql.service
  • 创建从库同步数据的账号:这两个命令是在mysql的终端执行的。
grant replication slave on *.* to 'jgyw'@'192.168.197.136' identified by 'j123456';
flush privileges;

?mysql8以上版本使用下面方法:

在Mysql 8版本中,分两步设置权限 

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'WITH GRANT OPTION;
这一行命令来设置用户权限,必须分两步来实现设置用户权限【先创建用户、在对该用户分配用户权限】,最后刷新权限

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
  • 查看主库的状态:mysql的终端执行
show master status\G;

返回的信息为:

*************************** 1. row ***************************
             File: mysql-bin.000002
         Position: 2380
     Binlog_Do_DB: jgyw
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

2、配置从库

  • 修改my.cnf文件,在[mysqld]加入下面的内容:
# 服务的唯一编号
server-id = 2

# 开启mysql binlog功能
log-bin = mysql-bin

# binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW

# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal

# 指定需要复制的数据库名为furniture_store
replicate-do-db = furniture_store
  • 修改好配置文件,重启mysql服务
systemctl restart mysql.service
  • 执行同步命令:mysql的终端执行

# 第一步:设置主服务器ip,同步账号密码,同步位置
change master to master_host='192.168.197.135',master_user='jgyw',master_password='jgyw@123',master_log_file='mysql-bin.000002',master_log_pos=2380;

#######注意:########## mysql8以上:get_master_public_key=1
错误提示:ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

【分析】mysql8默认使用插件caching_sha2_password,有些client连接报这个错误,需要拿到server的public key来加密password。

【解决】加参数可以解决:--get-server-public-key
master_host='192.168.197.135',master_user='jgyw',master_password='jgyw@123',master_log_file='mysql-bin.000002',master_log_pos=2380,get_master_public_key=1;

# 第二步:开启同步功能
start slave;
  • 查看从库的状态

    mysql的终端执行:

    show slave status\G;
    

    返回信息为:

注意:Slave_IO_Running和Slave_SQL_Running的状态都为Yes时,说明从库配置成功。

可能碰到的问题

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

mysql 5.6 之后引入了uuid的概念,各个复制主从结构中的 server_uuid 要保证不一样。由于我这台新 Mac 是用系统自带的「迁移助理」从老机器迁移过来的,所以说,所有的软件和配置都是一模一样的。

通过下面的语句可查看 server_uuid 的值 和 auto.cnf 的路径,auto.cnf 中保存了 server_uuid 的值。

show variables like '%server_uuid%';
show variables like '%datadir%';

我查到的从服务器上的 datadir 目录在 /usr/local/var/mysql,修改目录下的 auto.cnf 文件中的 server-uuid 的值

修改 datadir 目录下的auto.cnf 文件中的 server-uuid 的值。

然后再重启服务,查看同步状态就不会有这个问题了。

3、从数据库数据初始化:跨服务器数据导入

mysqldump --host=h1 -uroot -proot --databases db1 |mysql --host=h2 -uroot -proot db2
将h1服务器中的db1数据库的所有数据导入到h2中的db2数据库中,db2的数据库必须存在否则会报错
 
mysqldump --host=192.168.80.137 -uroot -proot -C --databases test |mysql --host=192.168.80.133 -uroot -proot test 

注意:先在从数据库停止同步,stop slave;数据倒过来后start slave;

参考:Mysql主库有数据,从库从新初始化数据流程_Hoboson0316的博客-CSDN博客
=======================================================================Mysql主库有数据,从库从新初始化数据流程============================================================================
0、停止应用,mysql主库全库备份
1、停止从库复制进程
?? ?stop slave ;
2、锁定主数据库,只允许读取不允许写入,这样做的目的是防止备份过程中或备份完成之后有新数据插入,导致备份数据和主数据数据不一致。主库锁表(将所有的脏页都要刷新到磁盘,然后对所有的表加上了读锁)
?? ?flush tables with read lock;
3、查询主数据库状态,并记下FILE及Position的值
?? ?show master status;
4、备份主库数据
?? ?mysqldump ?aqzx ? ? ? ? ? -usystem -p'XXX' ?> ? ?aqzx.sql ? ??
?? ?mysqldump ?yhzx ? ? ? ? ? -usystem -p'XXX' ?> ? ?yhzx.sql?
?? ?mysqldump ?confcenter ? ? -usystem -p'XXX' ?> ? ?confcenter.sql?
?? ?mysqldump ?lhywzx ? ? ? ? -usystem -p'XXX' ?> ? ?lhywzx.sql?
?? ?mysqldump ?aqzx ? ? ? ? ? -usystem -p'XXX' ?> ? ?aqzx.sql ?? ?
5、将主库数据导入从库数据库 保持主从数据一致
?? ?drop database aqzx;
?? ?create database aqzx; ?
?? ?mysql ?aqzx ? ? ? ?-usystem -p'XXX' ?< ? aqzx.sql ? ? ? ? ?
6、从库配置
?? ?change master to master_host='172.17.0.2',
?? ? master_user='slave',
?? ? master_password='XXX',
?? ? master_port=3306,
?? ? master_log_file='mysql-bin.XXXX',
?? ? master_log_pos= 4952,
?? ? master_connect_retry=30; ?
7、启动主从复制start slave;,此时查看从库状态show slave status \G;,若是SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明开启主从复制过程成功。
8、解锁主数据库 切换回主数据库的终端,进行表解锁操作。
?? ?unlock tables;
9、测试主从复制
总结:是对主库的数据进行备份,然后将主数据库中导出的数据导入到从数据库,然后再开启主从复制,以此来保证主从数据库数据一致。
?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:56:15  更:2022-04-28 11:57:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:12:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码