ubuntu 16.04配置MySQL主从同步的配置方法

准备工作

1.主从数据库版本最好一致

2.主从数据库内数据保持一致

主数据库:121.199.27.227 /ubuntu 16.04 MySQL 5.7.21 ( 阿里云 )

从数据库:182.254.149.39 /ubuntu 16.04 MySQL 5.7.21 ( 腾讯云 )

防火墙配置

配置主服务器只允许特定 IP 访问数据库的端口,避免不必要的攻击。

主库防火墙配置

# iptables -A INPUT -p tcp -s slave_ip --dport 3306 -j ACCEPT
#删除可能已经存在的配置,避免出现多条重复记录
$ sudo iptables -D INPUT -p tcp -s 182.254.149.39 --dport 3306 -j ACCEPT
$ sudo iptables -D INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
$ sudo iptables -D INPUT -p tcp --dport 3306 -j DROP
$ sudo iptables -D INPUT -p udp --dport 3306 -j DROP
$ sudo iptables -D INPUT -p sctp --dport 3306 -j DROP
#增加配置,只允许特定地址访问数据库端口
$ sudo iptables -A INPUT -p tcp -s 182.254.149.39 --dport 3306 -j ACCEPT
$ sudo iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 3306 -j DROP
$ sudo iptables -A INPUT -p udp --dport 3306 -j DROP
$ sudo iptables -A INPUT -p sctp --dport 3306 -j DROP
$ sudo iptables -L -n
#保存配置
$ sudo apt-get install iptables-persistent
$ sudo netfilter-persistent save
#配置被保存到/etc/iptables/rules.v4 /etc/iptables/rules.v6这两个文件下面,
#最好确认一下实际保存的内容,尤其是安装了denyhosts等其他安全软件的情况下,
#可能会记录了多余的规则,需要手工删除
从库防火墙配置
# iptables -A OUTPUT -p tcp -d master_ip --dport 3306 -j ACCEPT
#删除可能已经存在的配置,避免出现多条重复记录
$ sudo iptables -D OUTPUT -p tcp -d 121.199.27.227 --dport 3306 -j ACCEPT
#增加配置
$ sudo iptables -A OUTPUT -p tcp -d 121.199.27.227 --dport 3306 -j ACCEPT
$ sudo iptables -L -n
#保存配置
$ sudo apt-get install iptables-persistent
$ sudo netfilter-persistent save
#配置被保存到/etc/iptables/rules.v4 /etc/iptables/rules.v6这两个文件下面,
#最好确认一下实际保存的内容,尤其是安装了denyhosts等其他安全软件的情况下,
#可能会记录了多余的规则,需要手工删除

主数据库master配置

1.修改mysql配置

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

在[mysqld]部分进行如下修改:

[mysqld]
log-bin = /var/log/mysql/mysql-bin.log #开启二进制日志,默认是注释掉的,我们去掉注释
server-id = 1 #设置server-id
bind-address = 0.0.0.0 #默认是127.0.0.1,此处我们设置为任意地址,放开远程访问,这么操作之前一定要确保防火墙配置正确,否则会产生安全风险

2.重启mysql,创建用于同步的用户账号

创建用户并授权:用户:repl 密码:slavepass

$ sudo service mysql restart
$ mysql -u root -p -e "CREATE USER 'repl'@'182.254.149.39' IDENTIFIED BY 'slavepass';" #创建用户
$ mysql -u root -p -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'182.254.149.39';" #分配权限
$ mysql -u root -p -e "flush privileges;" #刷新权限

3.查看master状态,记录二进制文件名(mysql-bin.000001)和位置(333802):

$ mysql -u root -p -e "SHOW MASTER STATUS;"
Enter password:
+------------------+----------+--------------+------------------+-------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |  333802 |       |         |          |
+------------------+----------+--------------+------------------+-------------------+

4.主库备份,为从库的第一次数据同步准备数据

使用如下脚本产生数据库备份文件

#此处以备份wordpress数据库为例子
datadump=`which mysqldump`
mysqluser="root"
userpass="password"
wordpressdb="wordpress"
backupwordpress_sql=$wordpressdb.`date +%Y%m%d`.sql
if $datadump -u $mysqluser --password=$userpass -h localhost --opt $wordpressdb > $backupwordpress_sql 2>&1
then
  echo " backup $wordpressdb success"
else
  echo " backup $wordpressdb error"
  exit 1
fi
#检验文件尾部是否存在 “-- Dump completed on”,如果存在不存在,则说明备份出错了。
if [ 0 -eq "$(sed '/^$/!h;$!d;g' $backupwordpress_sql | grep -c "Dump completed on")" ];
then
 echo " backup $wordpressdb error"
 exit 1
else
 echo " backup $wordpressdb success"
fi

执行脚本,确保最后输出备份成功

$ cd ~
$ sudo bash backup_wordpress.sh

从服务器slave配置

1.修改mysql配置

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

修改server-id,每个数据库的server-id要求是唯一的,不能相互冲突

[mysqld]
server-id = 2 #设置server-id,必须唯一
log_bin         = /var/log/mysql/mysql-bin.log #日志也最好打开

2.首次还原数据库:

$ sudo service mysql restart
$ scp -P 22 -r root@121.199.27.227:~/wordpress.*.sql ./
#删除可能存在的一行警告信息,这行警告信息可能导致我们无法恢复数据
$ sed -i "/^mysqldump: \[Warning\] Using a password on the command line interface can be insecure\./d" wordpress.*.sql
$ mysql -u root -p -e "drop database wordpress;"
$ mysql -u root -p -e "create database wordpress;"
$ mysql -u root -p wordpress < wordpress.*.sql

3.重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

$ mysql -u root -p -e "CHANGE MASTER TO MASTER_HOST='121.199.27.227', MASTER_USER='repl', MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=333802;"

4.启动slave同步进程:

$ mysql -u root -p -e "start slave;"

5.查看slave状态:

$ mysql -u root -p -e "show slave status\G;"
Enter password:
*************************** 1. row ***************************
        Slave_IO_State: Waiting for master to send event
         Master_Host: 121.199.27.227
         Master_User: repl
         Master_Port: 3306
        Connect_Retry: 60
       Master_Log_File: mysql-bin.000001
     Read_Master_Log_Pos: 9448236
        Relay_Log_File: VM-114-251-ubuntu-relay-bin.000002
        Relay_Log_Pos: 17780
    Relay_Master_Log_File: mysql-bin.000001
       Slave_IO_Running: Yes
      Slave_SQL_Running: No
       Replicate_Do_DB:
     Replicate_Ignore_DB:
      Replicate_Do_Table:
    Replicate_Ignore_Table:
   Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
    ...

当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。

还可以用到的其他相关参数:

master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:

# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game

如之前查看master状态时就可以看到只记录了test库,忽略了manual和mysql库。

总结

以上所述是小编给大家介绍的ubuntu 16.04配置MySQL主从同步的配置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Ubuntu下mysql与mysql workbench安装教程

    Ubuntu 安装jdk:[链接] Ubuntu安装eclipse:[链接] Ubuntu下安装MySQL与mysql workbench:[链接] Ubuntu配置tomcat9:[链接] 1.sudo apt-get install mysql-server 安装完成,下面测试一下,输入: mysql -u root -p 提示输入密码,输入密码之后: 2.安装mysql workbench 下载好安装包之后执行如下命令(先cd到当前目录): sudo dpkg -i mysql-workb

  • ubuntu系统中Mysql ERROR 1045 (28000): Access denied for user root@ localhost问题的解决方法

    第一种方式: skip-grant-tables:非常有用的mysql启动参数 介绍一个非常有用的mysql启动参数-- --skip-grant-tables.顾名思义,就是在启动 mysql时不启动grant-tables,授权表.有什么用呢?当然是忘记管理员密码后有用. 以命令行参数启动mysql:# /usr/bin/mysqld_safe --skip-grant-tables & 3.修改管理员密码: use mysql; update user set password=passw

  • Ubuntu16.04 server下配置MySQL,并开启远程连接的方法

    背景 最近正在学nodejs,想到曾经有台云服务器,但是很久不用了,由于怕麻烦,一股脑的把云主机重装了个Ubuntu系统,于是配置MySQL成了配置服务中的一个环节(node用不用MySQL不管,主要是闲的重新配置一个-.-),但是配置的过程中,遇到不少问题,所以在解决一系列问题后留篇博备以后使用. 步骤 1.安装MySQL 由于博主用的是Ubuntu Server,用的XShell工具,没用桌面版,所以没有高大上的图形界面,一股脑用软件源提供的mysql即可. 命令如下: sudo apt-g

  • Ubuntu下MySQL root密码忘记的解决方法

    Linux下忘记MySQL root密码解决方法,基于Ubuntu 14.04 LTS. 本文是在root用户下进行操作,其他操作需要对应权限 编辑mysql的配置文件/etc/mysql/my.cnf,在[mysqld]段下加入一行"skip-grant-tables". 重启mysql服务 sudo service mysql restart 用空密码进入mysql管理命令行,切换到mysql库. root@DENGJAMESLI:~$ mysql Welcome to the M

  • 解决ubuntu 16.04安装mysql5.7.17后,登录时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost'问题

    一.问题描述 今天,笔者为了练习sql,在ubuntu16.04上安装了MySQL.笔者在网上搜索了在ubuntu16.04安装mysql的步骤,并跟着步骤一步步操作,然而,让笔者无法明白的是,网上说在安装mysql的过程会弹出输入密码的窗口,然而笔者在安装的过程中没有弹出任何窗口,而且也没有报错. 正当笔者在登录mysql时,问题就出现了,如图: 如图,笔者尝试多种输入方式,但都得到了一个同样地令人忧伤的结果,ERROR 1045 (28000): Access denied for user

  • Linux(Ubuntu)下mysql5.7.17安装配置方法图文教程

    前言 前面安装过mysql5.6,时隔三个月,开发那边反馈需要在MySQL中处理JSON类型的数据,查看文档,JSON是在5.7支持的新特性.于是着手安装Mysql57 Mysql5.6.28的安装:http://www.jb51.net/article/103743.htm 安装 若使用apt-get install mysql-server进行安装,默认安装的不是最新的版本,于是考虑去官网找一个最新的社区版本. 1.获取最新的Mysql版本 在 https://dev.mysql.com/d

  • 详解Ubuntu Server下启动/停止/重启MySQL数据库的三种方式

    Ubuntu Server下启动/停止/重启MySQL数据库的三种方式 系统环境:ubuntu server 12.10 x64(mysql为系统自带) 当我们需要修​​改MySQL的配置文件my.cnf(windows 下为 my.ini)来进行一些设置的时候,修改完之后我们需要重启MySQL. my.cnf文件位置为:/ect/mysql/my.cnf Waring:如果该文件配置错误,MySQL将无法启动. 下面介绍三种方式对MySQL进行启动/停止/重启操作: 启动mysql: 方式一:

  • Ubuntu手动安装mysql5.7.10

    本教程为大家分享了Ubuntu手动安装mysql5.7.10的过程,供大家参考,具体内容如下 1.下载安装包 MySQL官网下载地址 选择系统版本Ubuntu14.04后缀名为deb_bundle.tar的进行下载 Ubuntu Linux 14.04 (x86, 64-bit), DEB Bundle MySQL Server 5.7.x 237.6M(此处x即为mysql的最新版) 本文以mysql5.7.10为示例 (文件名为:mysql-server_5.7.10-1ubuntu14.0

  • ubuntu 16.04配置MySQL主从同步的配置方法

    准备工作 1.主从数据库版本最好一致 2.主从数据库内数据保持一致 主数据库:121.199.27.227 /ubuntu 16.04 MySQL 5.7.21 ( 阿里云 ) 从数据库:182.254.149.39 /ubuntu 16.04 MySQL 5.7.21 ( 腾讯云 ) 防火墙配置 配置主服务器只允许特定 IP 访问数据库的端口,避免不必要的攻击. 主库防火墙配置 # iptables -A INPUT -p tcp -s slave_ip --dport 3306 -j ACC

  • ubuntu 16.04下不能启动Steam的解决方法

    前言 之前卸过一次steam,因为Linux玩游戏确实体验没有Windows好. 最近想重新安装.我的系统版本已经升级到 Ubuntu 16.04 LST 版本,并且我的显卡是amd64. 安装steam后运行报错了: $ steam Setting up Steam content in /home/weapon/.local/share/Steam Running Steam on ubuntu 16.04 64-bit STEAM_RUNTIME is enabled automatica

  • Ubuntu 16.04下无法安装.deb的解决方法

    前言 本文主要给大家讲述了在 Ubuntu 16.04 在刚安装好的时候,下载一些 .deb 软件后,通过 Ubuntu Softwrare Center 无法安装的解决方案.下面话不多说,来看看详细的介绍吧. 问题 当刚安装好 Ubuntu 16.04 后,发现要安装 chrome 和 搜狗拼音都安装不了,下载的是 .deb 文件,出现图片中的问题. 解决方案 sudo apt-get install gdebi 接着在右击你要安装的 .deb 文件,选择 Open With -> GDebi

  • Ubuntu 16.04 LTS下安装MATLAB 2014B的方法教程

    环境配置说明: 环境:Ubuntu 16.04LTS 软件:MATLAB 2014B MATLAB 2014B 下载地址(带Crack)如下: 百度云下载:   链接: https://pan.baidu.com/s/1kVJQVlX  密码: pj9m 本 地 下 载:    Ubuntu 16.04 LTS 官方正式版 32位                          Ubuntu 16.04 LTS 官方正式版 64位 步骤如下:  1.直接解压 matlab_R2014b.iso

  • Ubuntu 18.04下mysql 8.0 安装配置方法图文教程

    本文为大家分享了mysql 8.0安装配置方法,供大家参考,具体内容如下 直接使用apt install mysql-server安装,那么恭喜你踩坑. sudo apt install mysql-server默认会安装MySQL 5.7,将会出现一些莫名的问题,例如:安装过程没有要求输入root密码,而登录mysql时会要求密码(我就是遇到了这个问题,结果搞了一下午,等等-- 阅读了一下MySQL安装指南,发现MySQL5.7版本最高只适配到Ubuntu17.04,而MySQL8.0最高适配

  • mysql主从同步快速设置方法

    安装环境 centos 5.4 mysql 5.1.xx 采用rpm直接安装 xtrabackup 1.2.22 采用rpm直接安装 复制代码 代码如下: [mysqld] server-id = 1 log-bin innodb_flush_log_at_trx_commit=1 sync_binlog=1 datadir=/var/lib/mysql character-set-server=utf8 init_connect='SET NAMES utf8' 设定了默认字符集为utf8,可

  • Ubuntu 18.04安装mysql 5.7.23

    之前在Ubuntu 16.04安装 MySQL的时候很顺利,这次在 Ubuntu 18.04 中安装 MySQL 5.7.23 中,遇到一些坑,折腾了好久,这里做一个记录. 1. 安装数据库 sudo apt-get install mysql-server 默认情况下,在安装 mysql-server 的时候就会安装,mysql-client 等相关客户端. 2. 这个时候直接登录会出现问题 这就是一个坑,后来折腾半天发现使用 root 权限登陆的话就会成功. 好吧,既然只能在 root 用户

  • 在Ubuntu 16.04安装与使用Docker的教程详解

    介绍 Docker是一个应用程序,它使得在容器中运行应用程序进程变得简单和容易,这类应用程序就像虚拟机,只有更便携,更加资源友好,更依赖于主机操作系统. 有关详细介绍Docker容器的不同组件,请Docker生态系统:介绍公共组件 . 在Ubuntu 16.04上安装Docker有两种方法. 一种方法包括将其安装在操作系统的现有安装上. 其他涉及纺了一个名为工具的服务器Docker机即自动安装Docker就可以了. 在本教程中,您将学习如何在现有安装的Ubuntu 16.04上安装和使用它. 先

  • 详解Mysql主从同步配置实战

    1.Introduction 之前写过一篇文章:Mysql主从同步的原理. 相信看过这篇文章的童鞋,都摩拳擦掌,跃跃一试了吧? 今天我们就来一次mysql主从同步实战! 2.环境说明 os:ubuntu16.04 mysql:5.7.17 下面的实战演练,都是基于上面的环境.当然,其他环境也大同小异. 3.进入实战 工具 2台机器: master IP:192.168.33.22 slave  IP:192.168.33.33 master机器上的操作 1.更改配置文件 我们找到文件 /etc/

  • 如何在Ubuntu 16.04下使用MySql的GR

    一.前言 该文章主要是记录下从一个纯净的系统开始如何安装MySql 5.7.17 并且使用GR,以便于自己后期查看以及分享给他人. 二.安装mysql 因为默认ubuntu的源并不是最新的mysql所以我们需要如下几个步骤安装最新的安装包,当然我们这里还是使用的apt去安装. 1.下载apt仓库 sudo wget https://repo.mysql.com//mysql-apt-config_0.8.3-1_all.deb 2.安装apt仓库 sudo dpkg -i mysql-apt-c

随机推荐