MySQL生产环境下的主从复制启动项
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生产环境下的主从复制启动项的更多相关文章
- MySQL优化——MySQL 生产环境下 my.cnf 优化配置
MySQL 5.6/5.7 参数文件优化配置[client]port = 3306socket = /data/mysql/tmp/mysql.sockdefault-character-set = ...
- mysql在生产环境下有大量锁表,又不允许重启的情况下的处理办法
mysql在生产环境下有大量锁表,又不允许重启的情况下的处理办法 满头大汗的宅鸟该怎么办呢? mysql -u root -e "show processlist"|grep -i ...
- Mysql迁移工具在生产环境下的使用
在产品迭代开发发布过程中,由于业务需求的增加,数据库难免会有结构调整等操作. 在每个版本发布过程中怎么控制每个版本server端程序与数据库版本保持一致,以及数 据库升级.回滚等操作. 本博文宅鸟将向 ...
- 四步法分析定位生产环境下MySQL上千条SQL中的问题所在
第一步:通过以下两种方式之一来打开慢查询功能 (1)方式一:通过修改mysql的my.cnf文件 如果是5.0或5.1等版本需要增加以下选项: log-slow-queries="mysql ...
- 生产环境下,MySQL大事务操作导致的回滚解决方案
如果mysql中有正在执行的大事务DML语句,此时不能直接将该进程kill,否则会引发回滚,非常消耗数据库资源和性能,生产环境下会导致重大生产事故. 如果事务操作的语句非常之多,并且没有办法等待那么久 ...
- Python开发程序:生产环境下实时统计网站访问日志信息
日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...
- 监控Mysql主从环境下Slave延迟状态的操作记录
在MySQL主从环境下,通常会根据Seconds_Behind_Master的值来判断slave的延迟状态,这么做在大部分情况下尚可接受,但其实是并不够准确的.对于Slave延迟状态的监控,应该考虑多 ...
- 生产环境下JAVA进程高CPU占用故障排查
问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...
- 一次生产环境下MongoDB备份还原数据
最近开发一个版本的功能当中用到了MongoDB分页,懒于造数据,于是就研究了下从生产环境上导出数据到本地来进行测试. 研究了一下,发现MongoDB的备份还原和MySQL语法还挺类似,下面请看详细介绍 ...
随机推荐
- VMware ESX常用命令
一. VMware ESX Command 1. 看你的esx版本 vmware –v 2. 查看显示ESX硬件,内核,存储,网络等信息 esxcfg-info -a(显示所有相关的信息) esxcf ...
- Log4j和Log4j2的区别
Log4j是Apache的一个开源项目,我们不去考究它的起源时间,但是据我了解,log4j 1已经不再更新了. 下面我就以列举的方式来浅谈log4j和log4j 2的不同之处. 一.配置文件类型 lo ...
- 微信公众号开发笔记1-获取Access Token
获取你的Access Token a)可以采用网址的形式: 用appid和appsecert获得access token,接口为https://api.weixin.qq.com/cgi-bin/to ...
- SQL服务器模式
今天在执行这样一条语句时: SELECT store - freez AS less FROM `products`; 报如下错误: Data truncation: BIGINT UNSIGNED ...
- C# ABP WebApi与Swagger UI的集成
本文是配置WebApi与Swagger UI,可以参照 http://www.cnblogs.com/farb/p/ABPSwaggerUIIntegration.html 1. 安装swagger ...
- C#输出26个大写字母
C#输出26个大写字母,较快的方法:
- RDLC报表带搜索与传参数功能演示(ASP.NET MVC)
昨晚有演示了<ASP.NET MVC应用程序展示RDLC报表>http://www.cnblogs.com/insus/p/3665295.html RDLC报表.在实现过程中,有遇上了诸 ...
- Spring基础(3) : 静态工厂和实例工厂创建bean
public class Factory { public static Person staticCreate(){ Person p = new Person(); p.name="st ...
- java文件下载以及中文乱码解决
在客户端下载文件时替换下载文件的名称,但是当名称是中文时浏览器会出现乱码,解决代码如下: public org.springframework.http.ResponseEntity<Input ...
- 比较全git的.ignore文件配置
# maven,gradle ignoretarget/_build/build/_site/.gradle*dependency-reduced-pom.xmltest.* # eclipse ig ...