Linux(ubuntu)mysql数据库主从同步、配置

2023-11-12

一、查看两台主机的版本Ubuntu 16.04.3

root@iZ2zeht3zvxbq5ycy698pwZ:~# lsb_release -a
LSB Version:    core-9.20160110ubuntu0.2-amd64:core-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-amd64:security-9.20160110ubuntu0.2-noarch
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:    16.04
Codename:   xenial
root@iZ2zeht3zvxbq5ycy698pwZ:~# 

二、查看mysql的版本

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 5.7.21-0ubuntu0.16.04.1 |
+-------------------------+
1 row in set (0.00 sec)

mysql> 

三、以39.107.227.105当主机,39.107.116.135当从机
先登录主机 A,在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE(从复制)赋予权限,如:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'backup'@'39.107.116.135' IDENTIFIED BY '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 

刷新权限

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> 

如果有多台主机,就需要执行多次

四、(这个方法不要用,请看第五步)(坑,这是个坑,mysql5.7版本的改了my.cnf根本就无法使用)打开主机A的my.cnf,输入如下:(修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启mysql服务),位于/etc/mysql下的my.cnf

server-id               = 1    #主机标示,整数
log_bin                 = /var/log/mysql/mysql-bin.log   #确保此文件可写,开启bin-log
read-only              =0  #主机,读写都可以
binlog-do-db         =test   #指定mysql的binlog日志记录哪个db,多个写多行
binlog-ignore-db    =mysql #不需要备份的数据库,多个写多行
注意:如果要让mysql监听到其他的地址,可以将bind-address = 127.0.0.1注释掉。 
或者将bind-address = 0.0.0.0监听所有的地址 
1. 如果不按照如上所述设置,会报出错误信息:MYSQL ERROR 2003 (HY000): Can’t connect to MySQL server on192.168.1.X’ (111) 
2. 如果按照如上所述设置,报出错误信息:Host ‘192.168.1.X’ is not allowed to connect to this MySQL server ,那么请检查数据库账号的权限是否有问题。

五、mysql5.7版本的请修改,/etc/mysql/mysql.conf.d,以下mysqld.cnf文件的配置

root@iZ2zeht3zvxbq5ycy698pwZ:/etc/mysql/mysql.conf.d# pwd
/etc/mysql/mysql.conf.d

使用vi编辑mysqld.cnf

# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size   = 100M
binlog_do_db            = test (这个地方是指定同步的数据库)
binlog_ignore_db        = mysql(这个地方指定不同步的数据库)

六、重启一下mysql

root@iZ2zeht3zvxbq5ycy698pwZ:~# service mysql restart

七、通过以下命令验证二进制日志是否已经启动

mysql> show variables like 'log_%';
+----------------------------------------+--------------------------------+
| Variable_name                          | Value                          |
+----------------------------------------+--------------------------------+
| log_bin                                | ON                             |
| log_bin_basename                       | /var/log/mysql/mysql-bin       |
| log_bin_index                          | /var/log/mysql/mysql-bin.index |
| log_bin_trust_function_creators        | OFF                            |
| log_bin_use_v1_row_events              | OFF                            |
| log_builtin_as_identified_by_password  | OFF                            |
| log_error                              | /var/log/mysql/error.log       |
| log_error_verbosity                    | 3                              |
| log_output                             | FILE                           |
| log_queries_not_using_indexes          | OFF                            |
| log_slave_updates                      | OFF                            |
| log_slow_admin_statements              | OFF                            |
| log_slow_slave_statements              | OFF                            |
| log_statements_unsafe_for_binlog       | ON                             |
| log_syslog                             | OFF                            |
| log_syslog_facility                    | daemon                         |
| log_syslog_include_pid                 | ON                             |
| log_syslog_tag                         |                                |
| log_throttle_queries_not_using_indexes | 0                              |
| log_timestamps                         | UTC                            |
| log_warnings                           | 2                              |
+----------------------------------------+--------------------------------+
21 rows in set (0.01 sec)

八、mysql从库配置(135的那台机),mysql5.7版本的请修改,/etc/mysql/mysql.conf.d,以下mysqld.cnf文件的配置
从库只需要开启server-id就行了
这里写图片描述
如果要设置多个从库,则每个从库的server-id与主库和其他从库设置不同的唯一值。

九、mysql重启一下

root@iZ2ze451u03knf2sumyavyZ:~# service mysql restart

十、配置主从库之间的通信
(105的那台机)查看 Master-Server , binlog File 文件名称和 Position值位置 并且记下来

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     2021 | test         | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 

十一、要设置从库(135机)与主库(105机)进行通信,进行复制,使用必要的连接信息配置从库在从库上(135机)执行以下语句
将选项值替换为与系统相关的实际值
参数格式,请勿执行

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

请将参数修改成符合你自己的,再执行

mysql> CHANGE MASTER TO
    -> MASTER_HOST='39.107.227.105',
    -> MASTER_USER='backup',
    -> MASTER_PASSWORD='123456',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=2021;
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> 

下面这个参数对应于上图的Position

MASTER_LOG_POS=0 写成0 也是可以的

放在一行用逗号隔开,也是可以的

mysql> CHANGE MASTER TO MASTER_HOST='192.168.252.123', MASTER_USER='replication', MASTER_PASSWORD='mima', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=629;

十二、(135机)启动从数据库复制线程

mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)

mysql> 

十三、(135机)查看复制状态

show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 39.107.227.105
                  Master_User: backup
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 2021
               Relay_Log_File: iZ2ze451u03knf2sumyavyZ-relay-bin.014660
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
            ......

十四、(135)检查主从复制通信状态
这里写图片描述
这里写图片描述

Slave_IO_State #从站的当前状态 
Slave_IO_Running: Yes #读取主程序二进制日志的I/O线程是否正在运行 
Slave_SQL_Running: Yes #执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样 
Seconds_Behind_Master #是否为0,0就是已经同步了

如果不是:
主要有以下 4 个方面:
1、网络不通
2、密码不对
3、MASTER_LOG_POS 不对 ps
4、mysql 的 auto.cnf server-uuid 一样(可能你是复制的mysql)

第4问题可照一下操作

root@iZ2ze451u03knf2sumyavyZ:~# find / -name 'auto.cnf'
/var/lib/mysql/auto.cnf
quit
^C
root@iZ2ze451u03knf2sumyavyZ:~# vi /var/lib/mysql/auto.cnf
server-uuid=6b831bf3-8ae7-11e7-a178-000c29cb5cbc # 按照这个16进制格式,修改server-uuid,重启mysql service mysql restart ,并开启从库同步即可
root@iZ2ze451u03knf2sumyavyZ:~# service mysql restart
root@iZ2ze451u03knf2sumyavyZ:~# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> START SLAVE
    -> quit;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'quit' at line 2
mysql> START SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)

十五:通过第十步,查看到master是指定了同步的数据库和不同步的数据库。
那么我们现在不想指定这两个参数。
1.只需要回去将那两个变量给注释掉:

root@iZ2zeht3zvxbq5ycy698pwZ:/etc/mysql/mysql.conf.d# ls
mysqld.cnf  mysqld_safe_syslog.cnf
root@iZ2zeht3zvxbq5ycy698pwZ:/etc/mysql/mysql.conf.d# vi mysqld.cnf

2.重启主库(105机)

root@iZ2zeht3zvxbq5ycy698pwZ:/etc/mysql/mysql.conf.d# service mysql restart

3.登陆主库(105),查看主库状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4.登陆从库(135),从新配置跟随的主库信息
先停止线程

mysql> Stop SLAVE;
Query OK, 0 rows affected (0.01 sec)

在从库(135中)配置同步主库(105)

mysql> CHANGE MASTER TO MASTER_HOST='39.107.227.105', MASTER_USER='backup', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

5.启动从库同步线程

mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)

十五、测试主从同步情况
1.在主库中(105)在 Master-Server 创建测试库,使用创建的测试库,并创建表

mysql> CREATE DATABASE `replication_wwww.ymq.io`;
Query OK, 1 row affected (0.00 sec)
mysql> use `replication_wwww.ymq.io`;
Database changed
mysql> CREATE TABLE `sync_test` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.02 sec)
mysql> 

2.查看从库(135机)Slave-Server 查看是否同步过来

mysql> show databases
    -> ;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
| replication_wwww.ymq.io |
| sys                     |
+-------------------------+
5 rows in set (0.00 sec)

mysql> 

同步完成。
后记:搞技术要的就是耐心和解决问题的能力,不要急,一步步慢慢来,祝您成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux(ubuntu)mysql数据库主从同步、配置 的相关文章

随机推荐

  • java mail 添加附件以及邮件中穿插图片方法

    部分代码 创建邮件中的附件 param filepath 附件的路径 return 生成附件的对象 throws Exception 测试 filepath e 测试 tomcat png e盘下的tomcat图片 public stati
  • 基本的垃圾回收算法总结

    Java虚拟机中的垃圾回收机制的是虚拟机的灵魂所在 下面介绍下虚拟机中的主要回收算法 引用计数法 实现 对于实例化的一个对象O 只要有任何一个其他的对象引用O O的引用计数器就加一 当引用失效的情况下 引用计数器减一 优点 实现简单 缺点
  • 全国各大城市的经纬度表,留着以后做查询库用

    安徽省合肥的经纬度北纬31 52东经117 17 安徽省安庆的经纬度北纬30 31东经117 02 安徽省蚌埠的经纬度北纬32 56东经117 21 安徽省亳州的经纬度北纬33 52东经115 47 安徽省巢湖的经纬度北纬31 36东经11
  • css 卡片翻转效果实现

    直接贴代码
  • Vue 引入高德地图 vue-amap

    一 在高德开发平台 获取Key 已有可跳过 高德开发者平台 链接地址 1 控制台 我的应用 创建应用 添加key 创建应用 新建应用 选择web端 JS平台 last 到这里的 key 就有了 还得到了一个安全密钥 二 引入vue amap
  • 5G应用标志着移动互联网新时代真正到来

    5G网络普及后很可能实现已经多次被我们所畅想的万物互联 通过网络把家用电视 冰箱 洗衣机 空调等连接起来 再通过一个软件来进行控制 5G超高的网速 超低的延迟将会使无人驾驶 无人机作业 远程医疗技术等步入成熟阶段 因此 5G的应用标志着移动
  • TypeScript 在 vue 中的使用

    本文主要介绍 TypeScript 在 vue 中的使用 还有一些j注释起来的 js 代码做对照 参考链接 合成 API 的 TypeScript vue3中配合使用TS 还需要额外安装一个vscode插件 Typescript Vue P
  • 基于snooplog分析蓝牙连接过程,进一步学习蓝牙协议栈

    一 什么是BT snoop log 首先问题 1 为什么远端发来的消息没有收到 2 为什么搜索不到设备 3 为什么连不上 4 总之 研发过程中会遇到很多奇奇怪怪的问题 我们无法通过现象去分析原因 也不可能再过一遍代码吧 这时候需要再某些代码
  • 期货交易,一些你不得不知道的技巧

    众所周知 期货市场变化莫测 既有风险 又兼具了高回报 因此也被誉为 21世纪冒险者的游戏 虽然期货投资受市场 政治形势 经济发展等因素的影响 但作为一个成熟的交易模式 期货依然有着很大的魅力 既可以做长线 也可以短线为王 但无论采用何种交易
  • 如何建设水利数字孪生流域

    数字孪生流域是以物理流域为单元 时空数据为底座 数学模型为核心 水利知识为驱动 对物理流域全要素和水利治理管理活动全过程的数字化映射 智能化模拟 实现与物理流域同步仿真运行 虚实交互 迭代优化 建设水利数字孪生流域 重点包括以下几件事 获取
  • nginx日志access.log error.log按天生成存储,定时删除日志

    bin bash function cut nginx log files for lnmp v0 5 and v0 6 author http lnmp org set the path to nginx log files log fi
  • Qt多线程基础(一)线程同步之互斥锁同步

    一 直接使用QMutex进行同步 创建线程方法 继承自QThread 重写void run 函数 调用成员start 启动线程 start 中可加入优先级参数 互斥锁同步方法 void run 函数中使用QMutex来实现同步 当多个线程访
  • 【JS随笔】监听DOM内容改变

    目录 前言 一 addEventListener 1 示例 二 MutationObserver 1 示例1 2 示例2 总结 参考资料 前言 今天项目遇到一个需要监听DOM变化 根据DOM的变化情况 来展示不同的内容 于是上网搜索了各种方
  • HTML语法学习以及作业解答

    文章目录 技巧 html标签练习 作业01 作业02 作业03 作业04 作业05 作业06 作业07 作业08 作业09 作业10 技巧 1 输入 html5即可补全出html的骨架 或者是 tab键 2 MDN网站 https deve
  • git pull时报合并冲突的bug

    想在本地拉下最新的代码 不知为啥 出现合并冲突的bug warning Cannot merge binary files by tar HEAD vs 050fecfd1537b03953d219429f3 Auto merging by
  • 【解决】linux虚拟机开放端口号,虚拟机centos7开放端口

    原文链接 1 先查看防火墙是否开启的状态 以及开放端口的情况 systemctl status firewalld service 查看防火墙开启还是关闭 sudo firewall cmd list all 可以查看端口开放情况 fire
  • SSRF-服务端请求伪造

    SSRF 服务端请求伪造 1 SSRF是什么 SSRF Server side Request Forge 服务端请求伪造 由攻击者构造的攻击链接传给服务端执行造成的漏洞 一般用来在外网探测或攻击内网服务 2 SSRF可以做什么 扫内网 向
  • Latex编号

    用圆点标号 begin itemize item Latex 1 item Latex 2 item Latex 3 end itemize 效果如下 用数字编号 默认数字编号 begin enumerate item Latex 1 it
  • js 比较两个数组的内容是否相同

    js比较数组 arrA 和 arrB 可以用 arrA sort toString arrB sort toString 来进行比较 用循环肯定可以实现 不过太麻烦 这是一种简单的方法先将数组排序 然后转化成字符串 再比较字符串即可 测试时
  • Linux(ubuntu)mysql数据库主从同步、配置

    一 查看两台主机的版本Ubuntu 16 04 3 root iZ2zeht3zvxbq5ycy698pwZ lsb release a LSB Version core 9 20160110ubuntu0 2 amd64 core 9 2