MySQL的复制参数除了我们之前搭建主从时遇到的那几个之外,还有以下两个:

1、log-slave-updates

这个参数用来配置从库上是否启动了二进制日志的功能,默认是不开启的,如果开启了那么从库上的更新操作将会被记录到二进制日志中。

不过在级联复制的架构中,比如某个从库A也要作为其他服务器的主库,像这种链式的复制架构下,这个从库就需要打开此参数,因为从库A下面的从库还需要在从库A上获得二进制日志并进行同步操作。

2、read-only

此参数在生产环境中用的比较多,在生产环境中,从库一般读操作比较多,因为研发人员需要进行大量的查询,因此这个参数要设置,也就是只有超级用户可以进行更新操作。  这样子研发人员就不会乱删数据了,给我们运维找麻烦。

下面我们来演示一下操作步骤:

(1)、首先在主库上创建一个账号:

mysql> grant all privileges on haha.* to 'test'@'%' identified by '';
Query OK, 0 rows affected, 1 warning (0.01 sec)

(2)、从库上如果直接使用这个账户test登录从库的话,是可以删除数据的。所以我们需要继续设置。

(3)、关闭从库,使用read-only选项启动从数据库。

[root@:vg_adn_tidbCkhsTest:172.31.26.133 /usr/local/mysql/bin]#mysqladmin -uroot -p123456 shutdown
2019-01-03T07:56:25.248454Z mysqld_safe mysqld from pid file /data/data_mysql/mysql.pid ended
[]+ Done mysqld_safe --read-only
[root@:vg_adn_tidbCkhsTest:172.31.26.133 /usr/local/mysql/bin]#mysqld_safe --read-only&
[] 909
[root@:vg_adn_tidbCkhsTest:172.31.26.133 /usr/local/mysql/bin]#2019-01-03T07:56:38.797120Z mysqld_safe Logging to '/usr/local/mysql/logs/mysql.log'.
2019-01-03T07:56:38.826034Z mysqld_safe Starting mysqld daemon with databases from /data/data_mysql

(4)这个时候我们在从库上使用账户test来登录,注意是从库。然后进行删除操作。

[root@:vg_adn_tidbCkhsTest:34.202.241.16:172.31.26.133 /usr/local/mysql/bin]#mysql -utest -p12345
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 5
MySQL [(none)]> use haha
Database changed
MySQL [haha]> select * from hehe where id=7;
+------+----------+
| id | name |
+------+----------+
| 7 | xiaowang |
+------+----------+
1 row in set (0.00 sec) MySQL [haha]> delete from hehe where id = 7;
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement

可以看到使用read-only选项登录的从数据库是拒绝普通用户的更新操作,以确保数据库的安全。

注意:今天我也做过其他的试验:比如在从库上创建一个账户然后赋予权限,然后再set global read-only=1,(我在my.cnf文件中也设置了read-only=ON)发现即使这样子设置后这个账户登录后仍然是可以删除数据的,后来做了上面的这几个步骤就成功了,因此我觉得大概有两种方法来确保从库进行读操作而不能更新,一个是上面的方法,还有一个是创建的用户仅仅赋予select查询权限,然后使用这些普通用户登录,禁止他们修改数据。当然第一种方法最常见。

指定复制的数据库或者表

有时候用户只需要将关键的数据库或者表备份到从库上,那么我们可以设置一下几个值:

replicate-do-db                    #需要复制的数据库
replicate-do-table                #需要复制的数据库的表
replicate-ignore-db              #不需要复制的数据库
replicate-ignore-table

  以上的参数可以在my.cnf中设置,当然也可以在mysql的启动参数里面进行设置。如果需要指定同步多个数据库或表,依次重复写就可以了。

现在我们做个实验:只复制主库的fruit数据库下的apple这个表,而orange表则不复制。

(1)、在主库上创建数据库和两个表

mysql> create database fruit;
Query OK, 1 row affected (0.00 sec) mysql> use fruit
Database changed
mysql> create table apple(
-> id tinyint,
-> address char(16)
-> );
Query OK, 0 rows affected (0.02 sec) mysql> create table orange( id tinyint, address char(16) );
Query OK, 0 rows affected (0.01 sec) mysql> insert into apple values (1,'shandong');
Query OK, 1 row affected (0.00 sec) mysql> insert into orange values (1,'hainan');
Query OK, 1 row affected (0.00 sec)

(2)、从库以指定复制表的参数启动

[root@:vg_adn_tidbCkhsTest:172.31.26.133 /usr/local/mysql/bin]#mysqld_safe --replicate-do-table=fruit.apple &              #以指定复制表的参数进行启动
[] 18874
[root@:vg_adn_tidbCkhsTest:172.31.26.133 /usr/local/mysql/bin]#2019-01-03T09:04:13.797663Z mysqld_safe Logging to '/usr/local/mysql/logs/mysql.log'.
2019-01-03T09:04:13.827186Z mysqld_safe Starting mysqld daemon with databases from /data/data_mysql [root@:vg_adn_tidbCkhsTest:34.202.241.16:172.31.26.133 /usr/local/mysql/bin]#mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 4
MySQL [(none)]> use fruit
Database changed
MySQL [fruit]> show tables;                                                     #我发现只有一张表,而没有orange这个表
+-----------------+
| Tables_in_fruit |
+-----------------+
| apple |
+-----------------+
1 row in set (0.00 sec) MySQL [fruit]> select * from apple;
+------+----------+
| id | address |
+------+----------+
| 1 | shandong |
+------+----------+
1 row in set (0.00 sec)

从测试的结果来看,在主库上创建了两个表,而在从库只有我指定复制的那张表的数据同步了过来,其他的都没有。

MySQL生产环境下的主从复制启动项的更多相关文章

  1. MySQL优化——MySQL 生产环境下 my.cnf 优化配置

    MySQL 5.6/5.7 参数文件优化配置[client]port = 3306socket = /data/mysql/tmp/mysql.sockdefault-character-set = ...

  2. mysql在生产环境下有大量锁表,又不允许重启的情况下的处理办法

    mysql在生产环境下有大量锁表,又不允许重启的情况下的处理办法 满头大汗的宅鸟该怎么办呢? mysql -u root -e "show processlist"|grep -i ...

  3. Mysql迁移工具在生产环境下的使用

    在产品迭代开发发布过程中,由于业务需求的增加,数据库难免会有结构调整等操作. 在每个版本发布过程中怎么控制每个版本server端程序与数据库版本保持一致,以及数 据库升级.回滚等操作. 本博文宅鸟将向 ...

  4. 四步法分析定位生产环境下MySQL上千条SQL中的问题所在

    第一步:通过以下两种方式之一来打开慢查询功能 (1)方式一:通过修改mysql的my.cnf文件 如果是5.0或5.1等版本需要增加以下选项: log-slow-queries="mysql ...

  5. 生产环境下,MySQL大事务操作导致的回滚解决方案

    如果mysql中有正在执行的大事务DML语句,此时不能直接将该进程kill,否则会引发回滚,非常消耗数据库资源和性能,生产环境下会导致重大生产事故. 如果事务操作的语句非常之多,并且没有办法等待那么久 ...

  6. Python开发程序:生产环境下实时统计网站访问日志信息

    日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...

  7. 监控Mysql主从环境下Slave延迟状态的操作记录

    在MySQL主从环境下,通常会根据Seconds_Behind_Master的值来判断slave的延迟状态,这么做在大部分情况下尚可接受,但其实是并不够准确的.对于Slave延迟状态的监控,应该考虑多 ...

  8. 生产环境下JAVA进程高CPU占用故障排查

    问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...

  9. 一次生产环境下MongoDB备份还原数据

    最近开发一个版本的功能当中用到了MongoDB分页,懒于造数据,于是就研究了下从生产环境上导出数据到本地来进行测试. 研究了一下,发现MongoDB的备份还原和MySQL语法还挺类似,下面请看详细介绍 ...

随机推荐

  1. Java subList、toArray、asList 注意点

    1. ArrayList的subList 结果不可以强转成ArrayList,否则抛出ClassCastException异常,原因是subList返回的是ArrayList的内部类SubList,并 ...

  2. 让 markdown 生成带目录的 html 文件

    安装 npm install -g i5ting_toc 用法 进入 markdown 文件所在的文件夹 举个栗子: 你的sample.md文件放在桌面上 cd /Users/dora/Desktop ...

  3. 疯狂Java讲义PDF

    java学习资料,仅供学习交流,自行取用↓ 链接:https://pan.baidu.com/s/1dF1wCST 密码:i75g

  4. win10 磁盘占用高--- 禁用用户改善反馈 CompatTelRunner.exe

    1. 2.右键点开[这台电脑],点[管理],点[服务和应用程序]点[服务],在右边框里把[superfetch] [windows search][HomeGroupListener] [HomeGr ...

  5. UIKit 框架之UIActionSheet

    UIAlertView和UIActionSheet相似,区别很小, 很容易理解. // // ViewController.m // UIActionSheet // // Created by Ci ...

  6. UIView动画下

    #import "ViewController.h" @interface ViewController () { UIButton *btn; } @end @implement ...

  7. MVC解决WebFrom的缺点

    来自:http://www.cnblogs.com/xiaozhi_5638/p/4019065.html ASP.NET Webforms Behind Code的好处和存在的问题 ASP.NET ...

  8. c# 连等的写法都做了什么?

    在工作中遇到这样一个问题,批量对变量赋值相同的值时,如下: a = ; b = ; c = ; d = ; 我想这样写: a= b = c = d = ; 分别对应IL: Dup 复制计算堆栈上当前最 ...

  9. 理解Java序列化

    前言 Java对象是在JVM中产生的,若要将其进行传输或保存到硬盘,就要将对象转换为可传输的文件流.而目前Java对象的转换方式有: 利用Java的序列化功能序列成字节(字节流),一般是需要加密传输时 ...

  10. HDU1815(二分+2-SAT)

    Building roads Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...