- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章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 访问数据库的端口,避免不必要的攻击.
主库防火墙配置 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# 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配置 。
1
|
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
|
在[mysqld]部分进行如下修改:
1
2
3
4
|
[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 。
1
2
3
4
|
$ 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):
1
2
3
4
5
6
7
|
$ 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.主库备份,为从库的第一次数据同步准备数据 。
使用如下脚本产生数据库备份文件 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#此处以备份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
|
执行脚本,确保最后输出备份成功 。
1
2
|
$ cd ~
$ sudo bash backup_wordpress.sh
|
从服务器slave配置 。
1.修改mysql配置 。
1
|
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
|
修改server-id,每个数据库的server-id要求是唯一的,不能相互冲突 。
1
2
3
|
[mysqld]
server-id = 2 #设置server-id,必须唯一
log_bin = /var/log/mysql/mysql-bin.log #日志也最好打开
|
2.首次还原数据库:
1
2
3
4
5
6
7
|
$ 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语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
1
|
$ 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同步进程:
1
|
$ mysql -u root -p -e
"start slave;"
|
5.查看slave状态:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
$ 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]可添加修改如下选项:
1
2
3
4
5
6
|
# 不同步哪些数据库
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主从同步的配置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:http://www.mobibrw.com/2018/10541 。
最后此篇关于ubuntu 16.04配置MySQL主从同步的配置方法的文章就讲到这里了,如果你想了解更多关于ubuntu 16.04配置MySQL主从同步的配置方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我们打算做一主两从的配置。我们的目标如下。我们有大量的传入记录,因此我们计划执行以下操作: Master - has only past 7 days records Slave 1 - as sam
我已经成功地设置了一个主从环境,它绝对可以正常工作。 我遇到的唯一问题是从表中选择计数,它们不相同但是在 5 分钟后从主选择,在从属上创建 50 行,也创建 50 行(这就是为什么我说我'我确定它工作
我有一个与 MariaDb 实例相关的业务需求,该实例应该在具有故障转移功能的主从配置中工作。 查看我看到的文档,可以配置多集群主机 (galera) 或简单的主从副本。 配置主从+故障转移有什么建议
我想将 qml 与主从界面一起使用,但我不知道如何以正确的方式将当前项目传递到详细信息 View 。主视图中的 ListView 使用 C++ 模型(QSQLTableModel 的附加组件,它工作正
我有一个主从 fragment 布局,看起来像这样: 当从 ListView 中选择一个数字时,详细 View 中的值会发生变化(即单选按钮文本发生变化)。我有以下问题:当我在 ListView 中单
当主服务器已经有大量数据时,有没有办法复制mysql。我尝试了常规方法,但很难获取MASTER_LOG_POS值。从服务器如何能够复制主服务器上先前存在的数据。 最佳答案 通常,您会从现有数据库的完整
如果主数据库出现故障,我想切换从数据库。我找到了 Master/Slave开关,但它用于读写(看起来很合乎逻辑,但不是这种情况)。你能在 zend 中给出“db failure”策略吗? 最佳答案 看
场景: 我们的架构基于 memcached,随着用户群数量的增加,我们需要将缓存复制到多个服务器。 我们可以使用repcached实用程序轻松地在两台服务器之间进行复制。 我们希望以这样的方式负载平衡
单机配置启动 Redis安装 下载地址: http://redis.io/download 安装步骤: 1: 安装gcc编译器:yum install gcc 2:
我有一些关于主从数据复制的问题,是否有机会重新同步它们,以便在主从数据中拥有相同的数据,而无需尝试在从属数据上手动添加与主数据相同的数据? 最佳答案 一种选择是对主服务器进行备份并使用它来完全替换副本
我有一个Master和一个Slave 操作系统:MySQL5.6 & RHEL 7.0 复制状态:运行良好 一切工作正常且正确我想检查数据是否在服务器之间正确复制(主到从),并在 mysqlrplsy
我是 pgbouncer 1.7 的新手,我想用主从配置来配置它。 我已经使用 repmgr 配置了 postgres 9.3 流复制,我想使用 pgbouncer 进行负载平衡和连接池,以便在主服务
我想将一个从站连接到 Master-Jenkins,但是在尝试连接时出现以下错误: [05/02/18 15:26:59] [SSH] Opening SSH connection to Key e
我在 Windows 计算机上运行 SonarQube Server 和 Jenkins 实例。 我已经创建了 Jenkins 作业来使用 SonarQube 生成代码覆盖率报告。该作业在 Linux
我有一个这个模型(它不是实际代码,为了清楚起见,我省略了 INotifyPropertyChanged 实现)。 public class Project { public Ob
我正在使用分开的主细节剑道 ui 网格。主网格位于标签条 1 (tabstrip.select(0)) 内。添加/编辑字段(用于主网格)位于首页的标签条 2 (tabstrip.select(1))
我有 5 个选项卡栏项目。第五项是 UISplitViewController。在肖像模式下,在应用程序启动时,我可以看到详细信息屏幕,而不是主屏幕。我期待着大师的到来。在横向模式下,主从细节工作正常
作为 swift 的新手,我正在尝试使用 Master View Controller,在其中我使用 JSON 阅读博客并将其存储在核心数据中。一切都很好,只是我不明白如何在向右滑动和删除时从核心数据
我正在尝试使用主从复制配置 MySQL 数据库。在我意识到必须使用此复制来设置环境之前,我已经有 2 台独立的服务器运行它们自己的 MySQL 数据库。这些服务器中的每一个的配置都完全相同。 MySQ
我有一个正在运行的 Django 应用程序。我使用的数据库后端是 PostGreSql。一切对我来说都很好。 现在我想为我的数据库创建一个主从复制,这样: 无论 master 发生什么变化,都会在 s
我是一名优秀的程序员,十分优秀!