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语法还挺类似,下面请看详细介绍 ...
随机推荐
- WM_COMMAND和WM_NOTIFY区别[转]
对这几个消息的理解要先了解一下Window消息的背景. 在Windows3.1里,控件会将mouse, keybord等等的消息通知它的父窗口, 使用的消息就只有WM_COM ...
- ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(1)
文章转自:http://www.xuboyi.com/298.html 前言 网站运营有一段时间了,记录的内容都是杂七杂八的,思前想后,决定给大家分享一套ASP.Net的系列教程.手把手的做一套通用后 ...
- ADO.NET 【攻击及防御】
sql字符串注入攻击 SQL注入攻击是黑客对数据库进行攻击的常用手段之一.SQL注入的手法相当灵活 SQL注入攻击会导致的数据库安全风险包括:刷库.拖库.撞库. 一般来说,SQL注入一般存在于形如:H ...
- order by与索引(转载)
order by与索引 ORDER BY 通常会有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了.另一个是把结果选好之后再排序. 用有序索引这种,当然是 ...
- 【Linux】安装openssh-server依赖openssh-client版本错误的解决办法
这是因为,openssh-server是依赖于openssh-clien的,ubuntu自带了openssh-client,自带的openssh-clien与所要安装的openssh-server所依 ...
- Android瀑布流照片
http://blog.csdn.net/guolin_blog/article/details/10470797 记得我在之前已经写过一篇关于如何在Android上实现照片墙功能的文章了,但那个时候 ...
- java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorCompatHelper
在开发过程中,有的时候引入了多个三方库.在调用的时候会出现版本对应不上的原因.就会出现如标题的异常. 原因 经过查找,项目中使用的RecycleView类,进入类里面发现AnimatorCompatH ...
- python变量作用域,函数与传参
一.元组传值: 一般情况下函数传递参数是1对1,这里x,y是2个参数,按道理要传2个参数,如果直接传递元祖,其实是传递一个参数 >>> def show( x, y ): ... p ...
- python3.8 新特性
https://docs.python.org/3.8/whatsnew/3.8.html python 3.8的新功能本文解释了与3.7相比,python 3.8中的新特性. 有关完整的详细信息,请 ...
- Code Signal_练习题_variableName
Correct variable names consist only of English letters, digits and underscores and they can't start ...