微信技术群:Day9884125
1 linux编辑文档时候断网
当在编辑文档的时候,断网。再打开时候报发现交换文件
1.1 执行指令:
发现出问题的文件
ls -al
1.2 删除出问题文件
然后就可以使用了
2 主库配置
2.1 编辑/etc/my.cnf文件
# server-id 建议不使用0,因为会有问题
server-id=412501
# 开启binlog
log_bin=mysql-bin
# 指定中继日志的位置和命名
relay_log=/var/lib/mysql/mysql-relay-bin
# log_slave_update 不开启会遇到比较奇怪的现象
log_slave_updates=1
# 不要在配置文件my.cnf中设置master_port或master_host这些选项,这是老的配置方式,已经被废弃,它只会导致问题,不会有任何好处
# 允许最大连接数
max_connections=200
# 允许连接失败的次数
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
2.2 重启mysql服务
service mysqld restart
2.3 给用户分配权限
2.3.1 给root用户分配replication slave的权限
首先登录主数据库
mysql -u root -p
开放权限 用户slave
CREATE USER 'slave'@'%' IDENTIFIED BY 'Duay4125!';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
刷新数据库
flush privileges;
查看主节点同步状态
show master status;
实际生产环境中,通常不使用root用户,而会创建一个拥有全部权限的用户来负责主从同步。
这个指令结果中的file和position记录的是当前日志的binlog文件以及文件中的索引,而后面的binlog_do_db和binlog_lgnore_db这两个字段是表示需要记录binlog文件的库以及不需要记录binlog文件的库。目前没有进行配置,就表示是针对全库记录日志
3 从库配置
3.1 编辑/etc/my.cnf
# id不要和其他的server-id重复
server-id=412502
# 开启binlog
log_bin=mysql-bin
# 指定中继日志的位置和命名
relay_log=/var/lib/mysql/mysql-relay-bin
# log_slave_update 不开启会遇到比较奇怪的现象
log_slave_updates=1
# 允许最大连接数
max_connections=200
# # 允许连接失败的次数
max_connect_errors=10
# # 服务端使用的字符集默认为UTF8
character-set-server=utf8
3.2 设置主节点同步状态
3.2.1 登录从服务
mysql -u root -p;
3.2.2 设置同步主节点
change master to
master_host='8.142.93.199',
master_user='slave',
master_password='Duay4125!',
master_port=3306,
master_log_file='mysql-bin.000002',
master_log_pos=156,
master_connect_retry=30;
3.2.3 开启slave
start slave;
3.2.4 关闭slave
stop slave;
3.2.4 查看主从同步状态
show slave status \G;
注意,change master指令中需要指定的master_log_file和master_log_pos必须和主服务中查到的一致。
并且后续如果要检查主从架构是否成功,也可以通过检查主服务与从服务之间的File和Position这两个属性是否一致来确定。
我们重点关注其中红色方框的两个属性,与主节点保持一致,就表示这个主从同步搭建是成功的。
从这个指令的结果能够看到,有很多Replicate_开头的属性,这些属性指定了两个服务之间要同步哪些数据库、哪些表的配置。只是在我们这个示例中全都没有进行配置,就标识是全库进行同步。后面我们会补充如何配置需要同步的库和表。
4 验证
4.1 首先在主库中创建一个数据库
create database `test-pro`
4.2 查看主库和从库中的新建的数据库是否存在
show databases;
如果两个mysql中都有新建的数据库表示就成功了
5 注意:
这种binlog搭建的主从复制,数据库和表必须是新创建的,已有的数据库和表。从库默认是不会复制的
本次配置默认的是全部复制,如果哪些表和库不复制需要在my.cnf中添加配置
6 全库同步与部分同步
在实际环境中,一般并不需要针对全库做备份,而只需要对一些特别重要的库或者表进行同步。
6.1 master端:在my.cnf文件中
# 需要同步的二进制数据库名
binlog-do-db=master
# 只保留7天的二进制日志,以防磁盘被日志占满(可选)
expire-logs-days = 7
# 不备份的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=sys
6.2 在slave端:在my.cnf文件中
# 如果salve库名称与master库名相同,使用本配置
replicate-do-db = master
# 如果master库名[master]与salve库名[master01]不同,使用以下配置[需要做映射]
replicate-rewrite-db = master -> master01
# 如果不是要全部同步[默认全部同步],则指定需要同步的表
replicate-wild-do-table=masterdemo01.t_dict
replicate-wild-do-table=masterdemo01.t_num