注意:在同一台服务器上部署主从或主主之类的时候,数据库data下有一个auto.cnf里的uuid不能重复。

原则:做同步之前要保证两个数据库数据一致.

锁表操作:

FLUSH TABLES WITH READ LOCK;

注:没有锁定主服务器,这里记录的主服务器二进制日志position值可能会大于做mysqldump时的值,这将导致从服务器丢失在此期间的更新。如果可以保证在此期间主服务器不会出现创建新表的更新,那么丢失的影响不大;否则,将导致从服务器复制线程失败,这时必须在做mysqldump时锁定主服务器。
取消主数据库锁定 mysql>UNLOCK TABLES;

在主机1的mysqld下增加

server-id=1
log-bin=mysql-bin
binlog_format = mixed
#不需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
binlog-ignore-db=mysql,information_schema,performance_schema,sys
#不需要同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项
replicate-ignore-db=mysql,information_schema,performance_schema,sys
#同步参数:
#保证slave挂在任何一台master上都会接收到另一个master的写入信息
#将复制事件写入binlog,一台服务器既作主库又作从库此选项必需要开启
log-slave-updates
#控制数据库的binlog刷到磁盘上去,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。
sync_binlog=1
#避免两台服务器同时做更新时自增长字段的值之间发生冲突
auto_increment_offset=1
auto_increment_increment=2
slave-skip-errors=all #过滤掉一些没啥大问题的错误

小知识:slave_skip_errors选项有四个可用值,分别为: off,all,ErorCode,ddl_exist_errors。 默认情况下该参数值是off,我们可以列出具体的error code,也可以选择all,mysql5.6及MySQL Cluster NDB 7.3以及后续版本增加了参数ddl_exist_errors,该参数包含一系列error code(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)
    一些error code代表的错误如下:
    1007:数据库已存在,创建数据库失败
    1008:数据库不存在,删除数据库失败
    1050:数据表已存在,创建数据表失败
    1051:数据表不存在,删除数据表失败
    1054:字段不存在,或程序文件跟数据库有冲突
    1060:字段重复,导致无法插入
    1061:重复键名
    1068:定义了多个主键
    1094:位置线程ID
    1146:数据表缺失,请恢复数据库
    1053:复制过程中主服务器宕机
    1062:主键冲突 Duplicate entry '%s' for key %d

在主机2的mysqld下增加:

server-id=2
log-bin=mysql-bin
binlog-ignore-db=mysql,information_schema,performance_schema,sys#不需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
replicate-ignore-db=mysql,information_schema,performance_schema,sys #不需要同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项
#同步参数:
#保证slave挂在任何一台master上都会接收到另一个master的写入信息
log-slave-updates
sync_binlog=1
auto_increment_offset=2
auto_increment_increment=2
slave-skip-errors=all #过滤掉一些没啥大问题的错误

在主机1上登录mysql
cd /home/mysqlinstall/public/mysql/bin
./mysql -S ../mysql.sock -uroot -p'密码'
grant replication slave on *.* to repl@'主机2' identified by '密码';
例:grant replication slave on *.* to repl@'ip' identified by '密码';
flush privileges;
show master status;(或show master status \G)#记录下二进制日志文件名和位置

在主机2设置操作
cd /home/mysqlinstall/public/mysql/bin
./mysql -S ../mysql.sock -uroot -p'密码'
stop slave;
change master to master_host='主机1',master_user='repl',master_password='密码',master_log_file='mysql-bin.000001',master_log_pos=608;
例:change master to master_host='ip',master_port=3306,master_user='repl',master_password='密码',master_log_file='mysql-bin.000001',master_log_pos=609;
(master_log_file和master_log_pos填上刚才记录下主1的二进制日志文件名和位置)
start slave;
show slave status\G(出现Slave_IO_Running: Yes Slave_SQL_Running: Yes 标识主1设置成功,即可测试主主复制)

在主机2上操作
grant replication slave on *.* to repl@'主机1' identified by '密码';
例:grant replication slave on *.* to repl@'ip' identified by '密码';
flush privileges;
show master status;(或show master status \G)#记录下二进制日志文件名和位置

在主机1设置操作
stop slave;
change master to master_host='主机2',master_user='repl',master_password='密码',master_log_file='mysql-bin.000001',master_log_pos=154;
例:change master to master_host=ip',master_port=3306,master_user='repl',master_password='密码',master_log_file='mysql-bin.000001',master_log_pos=609;
(master_log_file和master_log_pos填上刚才记录下主1的二进制日志文件名和位置)
start slave;
show slave status\G(出现Slave_IO_Running: Yes Slave_SQL_Running: Yes 标识主1设置成功,即可测试主主复制)

在主机3上登录

server-id=3
log-bin=mysql-bin
master_info_repository = table
relay_log_info_repository = table
#限制普通用户只读
read-only=1
#限制超级管理员用户只读
super_read_only=1

mysql -uroot -p

CHANGE MASTER TO
MASTER_HOST='主1IP',
MASTER_PORT=3306, MASTER_USER='用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=886 for channel '主1标识';
(master_log_file和master_log_pos填上刚才记录下主1的二进制日志文件名和位置)

CHANGE MASTER TO
MASTER_HOST='主2IP',
MASTER_PORT=3306, MASTER_USER='用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154 for channel '主2标识';
(master_log_file和master_log_pos填上刚才记录下主2的二进制日志文件名和位置)

例:
change master to master_host='ip',master_port=3306,master_user='repl',master_password='密码',master_log_file='mysql-bin.000004',master_log_pos=154 for channel '3306标识';
change master to master_host='ip',master_port=3307,master_user='repl',master_password='密码',master_log_file='mysql-bin.000003',master_log_pos=154 for channel '3307标识';

​flush privileges;
start slave;
show slave status\G(出现Slave_IO_Running: Yes Slave_SQL_Running: Yes 标识主1 和标识主2设置成功)

1.创建用户CREATE USER 'hwb'@'%' IDENTIFIED BY '密码';

2.用户授权所以数据库 grant SELECT on *.* to 'hwb'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON `[databasename]`.* TO 'dba'@'%'
3.刷新 flush privileges;

测试表:

create database testdb;
create table testdb.data01(
id int not null primary key auto_increment,
name varchar(60),
age int); insert into testdb.data01 (name,age) values
('tom',18),
('jack',17),
('rock',16),
('james',15),
('cris',20);

通过 select @@hostname 查看可以看到此时连接的是主库 B。

Mysql数据库主主从设置相关推荐

  1. mysql设置约束l命令_MYSQLl数据库主键设置长度控制_MySQL

    bitsCN.com MYSQLl数据库主键设置长度控制 1.出现的问题? JEECMS套件(jeecms-2012-sp1)中有一个jeecms-db-2012-sp1.sql文件,文件里面有一张& ...

  2. windows mysql主主配置_基于docker MySQL数据库主主同步配置(windows上)

    安装docker部分 坑点 docker拉镜像速度过慢 点击docker图标,点击邮件看到setting,setting界面上点击docker engine,配置如图所示 还有两个备用的镜像地址 &q ...

  3. MySql数据库主键外键与数据库设计

    MySql数据库主键外键与数据库设计 首先要指出的: 列.字段.属性是一个概念 行.记录.元组是一个概念 MySQL数据库CONSTRAINT约束:非空约束,唯一约束,主键约束,外键约束 show c ...

  4. mysql数据表名设置大小写不敏感(Linux Centos)

    mysql数据表名设置大小写不敏感(Linux Centos) 0.删除数据表(可选) drop table yourTableName; 1.编辑mysql配置文件 vi /etc/my.cnf 在 ...

  5. oracle+cascade=gt;true,mysql数据库主外键级联删除脚本RESTRICT -- CASCADE

    在项目中,我们一般在数据库设计的时候做主外键关联设计,要么就不做.但是这样不符合规范,呵呵. 建立主外键关系的时候,默认是不能级联删除的.而出现往往在删除主表的数据时报错, 需要先删除从表然后再删除主 ...

  6. mysql数据库主键如何设计

    聊一个实际问题,淘宝的数据库的主键是如何设计的呢? 某些错误的离谱的答案还在网上流传着.其中一个明显的错误就是关于mysql的主键设计. 大部分人的回答如此自信就是:用8个自己的bigint做主键,而 ...

  7. 更改mysql数据库主键自增时报错ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1

    当我用SQLyog尝试修改已有记录的mysql数据表的主键为自动增长时,报出以下错误 ALTER TABLE causes auto_increment resequencing, resulting ...

  8. mysql 主键长度_MYSQLl数据库主键设置长度控制

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 1.出现的问题? JEECMS套件(jeecms-2012-sp1)中有一个jeecms-db-2012-sp1.sql文 ...

  9. mysql数据库主备表校验与修复

    用pt-table-checksum校验数据一致性 主从数据的一致性校验是个头疼的问题,偶尔被业务投诉主从数据不一致,或者几个从库之间的数据不一致,这会令人沮丧.通常我们仅有一种办法,热备主库,然后替 ...

最新文章

  1. 那些在一个公司死磕了5-10年的程序员,最后都怎么样了?
  2. python画人口迁徙图_echarts 手把手教你画迁徙图(城市内部级别+百度地图支持)2...
  3. eclipse3.2配置开发C/C++
  4. 设计法则 - 菲茨定律 (转)
  5. 没有varselect这个函数_C++的虚函数,虚析构函数,纯虚函数
  6. LeetCode-150-Evaluate Reverse Polish Notation
  7. iPhone 14 Pro太空黑渲染图曝光:感叹号挖孔+直角边框
  8. UILabel---.tff格式字体
  9. 一、 zedboardubuntu 14.04 的前期准备(定期更新)
  10. 延迟初始化Spring Bean的几种方式
  11. 如何借助大数据提升医疗质量管理
  12. 获取androdmanifest里面的meta-data
  13. PHP中的预定义常量、预定义变量、魔术常量
  14. 小学生python游戏编程5----拼图游戏继
  15. AI智能语音识别算法原理 二
  16. css斜线边框,CSS border斜线效果
  17. B-树、B+树、B*树
  18. 此页上的ActiveX控件和本页上的其他部分的交互可能不安全的解决办法
  19. ps批量修改图片尺寸
  20. 显著图(Saliency map)

热门文章

  1. Sentinel SuperPro加密锁编程开发指南
  2. 区块链项目——区块链网上安全商铺(合约代码、前端、后台)
  3. USB1.1学习笔记
  4. Windows server 2012 主域+辅域
  5. [JZOJ4588]冷战
  6. angular 双向绑定和事件绑定实现 输入框内容输出
  7. 面试常见SQL练习题
  8. mysql数据库扫描工具_Scuba2019最新免费版|Scuba(数据库扫描工具)官方版下载_v10.0.3_9号软件下载...
  9. 微信公众号开发环境搭建
  10. Bonecraft 界面汉化补丁