对DNS主从服务器进行key认证
在配置DNS主从服务器同步的时候,bind服务默认是允许任何人进行同步的,但是这样容易造成安全隐患。bind服务支持通过限制IP和key认证两种方式来对同步的来源Ip进行限制,限制IP的方法已经在此前的文章中演示多次,因此本文着重描述如何使用key认证来限制从服务器的来源。
本次实验我使用了两台虚拟机进行测试,分别是:
相关的主从服务器的配置此处不多细说,可参考我此前的文章; https://wwwjianshucom/p/e8b5866802d1
在DNS主服务器上生成认证key:
编辑/etc/namedconf文件:
编辑/etc/namedrfc1912zones文件:
随后分别创建/var/named/handwellcomzone和/var/named/1888888zone文件:
随后检查相关的配置文件,如无报错后,重新加载named服务即可:
此时没通过key认证的服务器尝试来同步相关的区域数据时,通过systemctl status named 或查看 /var/log/messages日志可看到以下的拒绝报错:
或者如果从服务器的认证key不正确,也会出现以下报错:
编辑从服务器的/etc/namedconf 文件:
编辑/etc/namedrfc1912zones文件:
配置完成后,验证检查相应的配置文件后重启服务即可:
此时查看对应的日志文件应能看到相应的同步信息如:
在LAMP架构中,我们一般使用MySQL作为数据库,而MySQL主从也是 高性能网站 架构中必要的环节(如 drupal 、Wordpress等架构的网站)。本文大概讲解一下MySQL主从的复制以及出现的问题。 MySQL主从复制一般情况下我们会设置需要同步的数据库,使用参数配置选
在LAMP架构中,我们一般使用MySQL作为数据库,而MySQL主从也是高性能网站架构中必要的环节(如drupal、Wordpress等架构的网站)。本文大概讲解一下MySQL主从的复制以及出现的问题。
MySQL主从复制一般情况下我们会设置需要同步的数据库,使用参数配置选项,binlog-do-db,可以在master上指定需要同步的数据库,replicate-do-db在从数据看上指定需要同步的数据库。(一般只设定master上的binlog-do-db即可,不需要两个同时设定。以防万一,在slave也可以加上replicate-ignore-db)。
我们遇到的问题是,在master上面新增了一个数据库,这个时候如何把新加的这个数据库添加到MySQL的主从复制链里?(即不重新复制整个库的情况下,重新设置主从复制)。
首先,我们大概罗列一下主从复制的基本步骤,(MySQL主从首先需要在各自服务器配置好)。
1 复制数据库。
mysqldump --master-data --single-transaction -R --databases [db_name] | gzip -9 - | pv > all-db-with-master-datasqlgz
注意:innodb用 –single-transaction, myisam需要用 –lock-all-tables。
2 复制,导入数据。
pv
3 启动slave数据库。
slave start
注意:切换到主的语句已经在导出的sql语句里面了,注意查看。change master to master_log_file=’(binlog name in relay_master_log_file)’, master_log_pos=(exec_master_log_pos number)。
那么,在现有的主从复制结构中,如何增加一个新的数据库进去?比如我们要增加一个数据库在master服务器上,比如,名为newdb的数据库。
具体操作如下:
1 从服务上,停掉slave数据库。
stop slave;
2 主服务器上,导出新数据库。
mysqldump --master-data --single-transaction -R --databases newdb > newdbsql
3 主服务器上,修改mycnf文件,添加新库到binlog-do-db参数,重启mysql。
4 在导出的newdbsql里面查找当前的日志文件以及位置(change master to …)
然后让slave服务器执行到这个位置。
start slave until MASTER_LOG_FILE="mysql-bin000001", MASTER_LOG_POS=1222220;
其中MASTER_LOG_FILE以及MASTER_LOG_POS在导出的数据库newdbsql顶部位置查找。
4 导入新库到从服务器上。
mysql
5 start slave
其中比较重要的是在主服务器上导出新库时的日志位置(position A),这个点很重要,以这个点做为分界线,导入新库。
这种方法也同样适用于某个数据库或者某个数据表不同步的情况,比如主从数据库有一个表由于某些原因数据不一致,那么上面的方法只需要去掉重启数据库一步,其他的操作基本
原文地址:如何添加新数据库到MySQL主从复制列表, 感谢原作者分享。
在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的。譬如服务器发生故障,没有备份服务器来提供服务的话,业务就得停止。介于这种情况,我们来学习一下mysql主从复制。
使用mysql主从复制的好处有:
1、采用主从服务器这种架构,稳定性得以提升。如果主服务器发生故障,我们可以使用从服务器来提供服务。
2、在主从服务器上分开处理用户的请求,可以提升数据处理效率。
3、将主服务器上的数据复制到从服务器上,保护数据免受意外的损失。
环境描述:
新企业要搭建架构为主从复制的mysql数据库。
主服务器(mysql-master):IP地址:19216848128,mysql已安装,没有用户数据。
从服务器(mysql-slave):IP地址:19216848130,mysql已安装,没有用户数据。
主从服务器均可正常提供服务。
主从复制配置如下:
在主服务器上操作:
1)、确保/etc/mycnf中有如下参数,没有的话需手工添加,并重启mysql服务。
[mysqld]
log-bin=mysql-bin 启动二进制文件
server-id=1 服务器ID
2)、登录mysql,在mysql中添加一个backup的账号,并授权给从服务器。
[root@localhost ~]# mysql -uroot –p123456 登录mysql
mysql> grant replication slave on to 'backup'@'19216848130' identified by 'backup'; 创建backup用户,并授权给19216848130使用。
3)、查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到。
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维 护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那 时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。
为什么使用主从复制?
1、主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。
2、通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。但是不要同时在主从服务器上进行更新,这样可能引起冲突。
3、使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。
MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让主服务器发送二进制日志。主服务器创建一个线程将二进制日志中的内容发送到从服务器。从服 务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,从服务器使用此线程读取中继日志并执行日 志中包含的更新。SHOW PROCESSLIST语句可以查询在主服务器上和从服务器上发生的关于复制的信息。
默认中继日志使用host_name-relay-binnnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序 列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪中继日志索引文件来识别目前正使用的中继日志。默认中继日志索引文件名为 host_name-relay-binindex。在默认情况,这些文件在从服务器的数据目录中被创建。中继日志与二进制日志的格式相同,并且可以用 mysqlbinlog读取。当SQL线程执行完中继日志中的所有事件后,中继日志将会被自动删除。
从服务器在数据目录中另外创建两个状态文件--masterinfo和relay-loginfo。状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。
设置主从复制:
1、确保在主服务器和从服务器上安装的MySQL版本相同,并且最好是MySQL的最新稳定版本。
2、在主服务器上为复制设置一个连接账户。该账户必须授予REPLICATION SLAVE权限。如果账户仅用于复制(推荐这样做),则不需要再授予任何其它权限。
mysql> GRANT REPLICATION SLAVE ON
-> TO 'replication'@'%yourdomaincom' IDENTIFIED BY 'slavepass';
3、执行FLUSH TABLES WITH READ LOCK语句清空所有表和块写入语句:
mysql> FLUSH TABLES WITH READ LOCK;
保持mysql客户端程序不要退出。开启另一个终端对主服务器数据目录做快照。
shell> cd /usr/local/mysql/
shell> tar -cvf /tmp/mysql-snapshottar /data
如果从服务器的用户账户与主服务器的不同,你可能不想复制mysql数据库。在这种情况下,应从归档中排除该数据库。你也不需要在归档中包括任何日志文件或者masterinfo或relay-loginfo文件。
当FLUSH TABLES WITH READ LOCK所置读锁定有效时(即mysql客户端程序不退出),读取主服务器上当前的二进制日志名和偏移量值:
mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
File列显示日志名,而Position显示偏移量。在该例子中,二进制日志值为mysql-bin003,偏移量为73。记录该值。以后设置从服务器时需要使用这些值。它们表示复制坐标,从服务器应从该点开始从主服务器上进行新的更新。
如果主服务器运行时没有启用--logs-bin,SHOW MASTER STATUS显示的日志名和位置值为空。在这种情况下,当以后指定从服务器的日志文件和位置时需要使用的值为空字符串('')和4
取得快照并记录日志名和偏移量后,回到前一中端重新启用写活动:
mysql> UNLOCK TABLES;
4、确保主服务器主机上mycnf文件的[mysqld]部分包括一个log-bin选项。该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232–1之间的一个正整数值。例如:
[mysqld]
log-bin
server-id=1
如果没有提供那些选项,应添加它们并重启服务器。
5、停止从服务器上的mysqld服务并在其mycnf文件中添加下面的行:
[mysqld]
server-id=2
slave_id值同Master_id值一样,必须为1到232–1之间的一个正整数值。并且,从服务器的ID必须与主服务器的ID不相同。
6、将数据备据目录中。确保对这些文件和目录的权限正确。服务器 MySQL运行的用户必须能够读写文件,如同在主服务器上一样。
Shell> chown -R mysql:mysql /usr/local/mysql/data
7、启动从服务器。在从服务器上执行下面的语句,用你的系统的实际值替换选项值:
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;
8、启动从服务器线程:
mysql> START SLAVE;
执行这些程序后,从服务器应连接主服务器,并补充自从快照以来发生的任何更新。
9、如果出现复制错误,从服务器的错误日志(HOSTNAMEerr)中也会出现错误消息。
10、从服务器复制时,会在其数据目录中发现文件masterinfo和HOSTNAME-relay-loginfo。从服务器使用这两个文 件跟踪已经处理了多少主服务器的二进制日志。不要移除或编辑这些文件,除非你确切知你正在做什么并完全理解其意义。即使这样,最好是使用CHANGE MASTER TO语句。
1建立专门用于Replication的账户
首先Replication操作会涉及到的两个重要权限,这里先做一下说明:
The REPLICATION CLIENT privilege enables the use of SHOW MASTER STATUS and SHOW SLAVE STATUS
REPLICATION CLIENT 使得用户可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是说这个权限是用于授予账户监视Replication状况的权力。
The REPLICATION SLAVE privilege should be granted to accounts that are used by slave servers to connect to the current server as their master Without this privilege, the slave cannot request updates that have been made to databases on the master server
REPLICATION SLAVE则是一个必须而基本的权限,它直接授予slave服务器以该账户连接master后可以执行replicate操作的权利。
一般来说,我们会单独在主服务器创建一个专门用于Replication的账户。这个账户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,保证该用户的职责单一。假定我们要建立的这个账户为repl,密码为repl,那么这一操作的命令如下:
mysql> GRANT REPLICATION SLAVE ON TO 'repl'@'1921680%' IDENTIFIED BY 'repl';
其中要特别说明一下1921680%,这个配置是指明repl用户所在服务器,这里%是通配符,表示19216800-1921680255的Server都可以以repl用户登陆主服务器。如果没有使用通配符,而访问的服务器又不在上述配制里,那么你将无法使用该账户从你的服务器replicate主服务器
另外在《Hight Performance MySql》一书中对用户权限的设置有所不同,作者建议在主机和从机上都配置repl账户,并同时赋予REPLICATION SLAVE和REPLICATION CLIENT权限,命令如下:
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON TO repl@'1921680%' IDENTIFIED BY 'repl';
作者解释了这样做的好处:一方面使用同一账户对Replication进行监视管理会很方便,不必区分slave,master,另一方面,repl账户在slave和master上的配制是一样的,这样如果我们切换slave和master,账户不需要做任何改动。
2配置主从服务器
主从服务器的配置都是通过改写mycnf/myini文件来完成的。
下面是主从服务器的必须的配置项:
主机必须的配置项:
log-bin //自定义,比如 log-bin=mysql-bin
server_id //为server起一个唯一的id,默认是1,推荐使用IP的最后一节。
从机必须的配置项:
server_id //为server起一个唯一的id,默认是1,推荐使用IP的最后一节
注意:一般,我们也会为从机设定log-bin,这是因为默认的log-bin文件是根据主机名命名的,一旦机器更改主机名就会出问题,再者保持主从机的配制一致也方便做主从机切换!
主机可选的配置项:(用于配置主机哪些库会做二进制日志用以Replicate)
binlog-do-db
binlog-ignore-db
从机可选的配置项:(用于配置从机会Replicate哪些库和表)
replicate-do-db, replicate-ignore-db
replicate-do-table, replicate-ignore-table
replicate-wild-do-table
replicate-wild-ignore-table
注意:一条建议是不要在mycnf/myini中配制master_host等选项,而应该使用CHANGE MASTER TO命令来动态设置!
对于Master端,我只需简单地设置server_id和log_bin两项即可,对于Slave端其实只需要设置server_id,但是还有一些推荐的设置项。以下是《Hight Performance MySql》一书中给出的Slave端的推荐设置
# SLAVE-END replication-related configuration
# The only required option for slave-end is server_id
# The other options are recommanded on P 349 of《Hight Performance MySql》
server_id=234
log_bin=mysql_bin_log
relay_log = mysql_relay_bin_log
log_slave_updates = 1
read_only = 1
3连接从服务器至主服务器进行Replicate
通过在从服务器上输入CHANGE MASTER TO命令可以使从服务连接到某个主服务器上进行replication
mysql> CHANGE MASTER TO MASTER_HOST='1921680246',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='repl',
-> MASTER_LOG_FILE='mysql-bin000001',
-> MASTER_LOG_POS=0;
输入上述命令后即完成了全部配置工作,通过:
start slave;
启动从服务的replication工作,这样主从服务器就开始同步了。你可以通过:
SHOW SLAVE STATUS/G;
命令来查看从服务器的状态,如果是Slave_IO_State一项显示:Waiting for master to send event,表示所有工作已经就绪。
0条评论