目录导航
-
撤销(Ctrl+Z)
-
重做(Ctrl+Y)
-
清空
-
H
标题(Ctrl+1~6)
- 一级标题
- 二级标题
- 三级标题
- 四级标题
- 五级标题
- 六级标题
-
粗体(Ctrl+B)
-
斜体(Ctrl+I)
-
删除线
-
插入引用(Ctrl+Q)
-
无序列表(Ctrl+U)
-
有序列表(Ctrl+O)
-
表格
-
插入分割线
-
插入链接(Ctrl+L)
-
插入图片
- 添加图片链接
-
插入代码块
-
保存(Ctrl+S)
-
开启预览
-
开启目录导航
-
关闭同步滚动
-
全屏(按ESC还原)
## 配置说明 主数据库1: 192.168.245.22 主数据库2: 192.168.245.33 ## 1、修改MySQL配置文件: ``` vi /etc/my.cnf ``` * 主数据库1: ``` server-id=1 log-bin=mysql-bin auto_increment_increment=2 auto_increment_offset=1 binlog-ignore=mysql binlog-ignore=information_schema binlog-ignore=performance_schema character_set_server=utf8 log-bin-trust-function-creators=1 ``` * 主数据库2: ``` port=3305 server-id=2 log-bin=mysql-bin auto_increment_increment=2 auto_increment_offset=2 binlog-ignore=mysql binlog-ignore=information_schema binlog-ignore=performance_schema character_set_server=utf8 log-bin-trust-function-creators=1 ``` ##### 这里对上述添加的配置做详细说明: 1. log_bin 启动mysql二进制日志,如果没有配置这个将无法远程链接 1. binlog-ignore 指定不同步的数据库,如果有多个数据库不需要同步可以多个分别声明 1. character_set_server=utf8 指定utf8为默认字符集 1. server-id 可以为任意自然数,必须保证两台mysql主机不重复 1. auto_increment_increment=2 步进值auto_imcrement。一般有n台主MySQL就填n 1. auto_increment_offset 设定数据库中自动增长的起点,两台mysql的起点必须不同,这样才能避免两台服务器同步时出现主键冲突 1. replicate-do-db 要同步的数据库,如果需要就填,指定数据库的名称即可,默认为所有库,声明了不同步就默认除了不同步数据库意外的所有库。这里我没写。 1. log-bin-trust-function-creators=1 在默认情况下mysql会阻止主从同步的数据库function的创建,这会导致我们在导入sql文件时如果有创建function或者使用function的语句将会报错。 ## 3、重启mysql * 主数据库1: ``` systemctl restart mysqld ``` * 主数据库2: ``` systemctl restart mysqld ``` ## 4、授权两个数据库相互授权 * 主数据库1:新建数据库的用户,并进行相互授权 ``` mysql -uroot -p //进入mysql grant replication slave, replication client on *.* to '新用户名'@'主数据库2的IP' identified by '新密码' flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接 ``` * 主数据库2:新建数据库的用户,并进行相互授权 ``` mysql -uroot -p //进入mysql grant replication slave, replication client on *.* to '新用户名'@'主数据库1的IP' identified by '新密码' flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接 ``` ## 5、分别查看两台主机的日志节点 ``` show master status; ``` ![](https://upload-images.jianshu.io/upload_images/21643577-39c73f5372459a77.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/800) ## 6、相互设置同步的日志节点 * 主数据库1 ``` change master to master_host='192.168.245.33', master_user='主数据库2用户名', master_password='主数据库2密码', master_log_file='mysql-bin.000004', //对应主数据库2的File字段 master_log_pos=2873; //对应主数据库2的Position字段 ``` * 主数据库2 ``` change master to master_host='192.168.245.22', master_user='主数据库1用户名', master_password='主数据库1密码', master_log_file='mysql-bin.000004', //对应主数据库1的File字段 master_log_pos=2873; //对应主数据库1的Position字段 ``` ##### 说明: * 所有的内容都是另一台主机的内容,log_file和log_pos对于另一台主机的日志节点。还有,必须要说明的是,每次“flush privileges”和“stop slave”后日志节点的内容会改变,所以如果不确定,每次执行此操作前必须要查看日志节点——show master status。另外,执行此操作时slave必须没有启动,如果之前执行了,那就先停止,指令:stop slave; ## 7、在两台主机上启动slave服务 ``` start slave; ``` * 出现下图所示,表示成功 ![](https://upload-images.jianshu.io/upload_images/21643577-34d1eed0e64012c3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 可能遇到的问题 * master and slave have equal MySQL server UUIDs 原因是:服务器的数据库UUID重复了,一般是虚拟机直接克隆会导致重复,数据库UUID存在auto.cnf里 解决: ``` find/ -name auto.cnf //查找auto.cnf 的位置 mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak // 备份auto.cnf systemctl restart mysqld // 重启mysqld,会自动生成新的auto.cnf ```
配置说明
主数据库1: 192.168.245.22
主数据库2: 192.168.245.33
1、修改MySQL配置文件:
vi /etc/my.cnf
- 主数据库1:
server-id=1
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1
binlog-ignore=mysql
binlog-ignore=information_schema
binlog-ignore=performance_schema
character_set_server=utf8
log-bin-trust-function-creators=1
- 主数据库2:
port=3305
server-id=2
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
binlog-ignore=mysql
binlog-ignore=information_schema
binlog-ignore=performance_schema
character_set_server=utf8
log-bin-trust-function-creators=1
这里对上述添加的配置做详细说明:
- log_bin 启动mysql二进制日志,如果没有配置这个将无法远程链接
- binlog-ignore 指定不同步的数据库,如果有多个数据库不需要同步可以多个分别声明
- character_set_server=utf8 指定utf8为默认字符集
- server-id 可以为任意自然数,必须保证两台mysql主机不重复
- auto_increment_increment=2 步进值auto_imcrement。一般有n台主MySQL就填n
- auto_increment_offset 设定数据库中自动增长的起点,两台mysql的起点必须不同,这样才能避免两台服务器同步时出现主键冲突
- replicate-do-db 要同步的数据库,如果需要就填,指定数据库的名称即可,默认为所有库,声明了不同步就默认除了不同步数据库意外的所有库。这里我没写。
- log-bin-trust-function-creators=1 在默认情况下mysql会阻止主从同步的数据库function的创建,这会导致我们在导入sql文件时如果有创建function或者使用function的语句将会报错。
3、重启mysql
- 主数据库1:
systemctl restart mysqld
- 主数据库2:
systemctl restart mysqld
4、授权两个数据库相互授权
- 主数据库1:新建数据库的用户,并进行相互授权
mysql -uroot -p //进入mysql
grant replication slave, replication client on *.* to '新用户名'@'主数据库2的IP' identified by '新密码'
flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接
- 主数据库2:新建数据库的用户,并进行相互授权
mysql -uroot -p //进入mysql
grant replication slave, replication client on *.* to '新用户名'@'主数据库1的IP' identified by '新密码'
flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接
5、分别查看两台主机的日志节点
show master status;
6、相互设置同步的日志节点
- 主数据库1
change master to
master_host='192.168.245.33',
master_user='主数据库2用户名',
master_password='主数据库2密码',
master_log_file='mysql-bin.000004', //对应主数据库2的File字段
master_log_pos=2873; //对应主数据库2的Position字段
- 主数据库2
change master to
master_host='192.168.245.22',
master_user='主数据库1用户名',
master_password='主数据库1密码',
master_log_file='mysql-bin.000004', //对应主数据库1的File字段
master_log_pos=2873; //对应主数据库1的Position字段
说明:
- 所有的内容都是另一台主机的内容,log_file和log_pos对于另一台主机的日志节点。还有,必须要说明的是,每次“flush privileges”和“stop slave”后日志节点的内容会改变,所以如果不确定,每次执行此操作前必须要查看日志节点——show master status。另外,执行此操作时slave必须没有启动,如果之前执行了,那就先停止,指令:stop slave;
7、在两台主机上启动slave服务
start slave;
- 出现下图所示,表示成功
可能遇到的问题
- master and slave have equal MySQL server UUIDs
原因是:服务器的数据库UUID重复了,一般是虚拟机直接克隆会导致重复,数据库UUID存在auto.cnf里
解决:
find/ -name auto.cnf //查找auto.cnf 的位置
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak // 备份auto.cnf
systemctl restart mysqld // 重启mysqld,会自动生成新的auto.cnf
评论
请
登录后发表观点