liunx mysql 主从同步设置 关键点

Posted 杨江才

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了liunx mysql 主从同步设置 关键点相关的知识,希望对你有一定的参考价值。

主库mysql配置文件:该配置文件默认是在 /etc/my.cnf

[mysqld]

max_allowed_packet=256M

server-id=1     

log-bin=mysql-bin  

replicate-do-db=web

auto_increment_increment=2  

auto_increment_offset=1

binlog_ignore_db=sys

general_log=on

general_log_file=/var/log/mysqld.log

其中

server-id=1     

log-bin=mysql-bin  

replicate-do-db=web

这三项是必须的web是数据库名

从库myslq 配置文件  

[mysqld]

port=3306

server-id=2

只需要配置一个server-id 即可不能和主库的ID一样     按网上的做法,配置文件改完后都要重启MySQL

直接在服务器上 cd /;

systemctl restart mysqld   输入这个命令即可

接下来要分别在两个库中都建立一个一模一样的名字和密码的账号

,这里会出现非常多坑,建议直接用root   账号,如果密码不一样就修改成一样的

MySQL8后密码规则变了,要使用下面语句将密码改成自然密码

mysql> ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'root的密码';

账号问题搞定后

接下来就是在两个服务器上登录 MySQL

先在主库上查看主库的日志文件和偏移量

mysql> show master status;;

 

这一步必须得;

然后到从库上登录myslq  输入下面语句;直接编辑好了 复制进去即可,是两条语句,也可以分开复制进去;

CHANGE MASTER TO

  MASTER_HOST='主库的IP地址',

  MASTER_USER='root',

  MASTER_PASSWORD='自然密码',

  MASTER_LOG_FILE='mysql-bin.000003',  #这里是上面一步在主库上查询到的数据库日志;

  MASTER_LOG_POS=447749; #这里是上面一步在主库上查询到的数据库日志偏移量;

START slave;  开始复制进程;

到这里就完成了;

接下来输入命令;

查看同步状态;

mysql> show slave status \\G;

经常会报错的,要么就是账号问题,要么就是两个数据库的数据结构不同,要么就是日志文件名和写错了,查看日志文件名这步绝对不能省,所以账号问题建议两个库都设置成root  ,密码整成一样,都整成自然密码,两个库的结构必须一样这是我上次进行同步的时候踩过的坑,记录于此

我上次进行的时候两个MySQL的版是不同的,主库的是5.6.4,从库的是8.0的版本,8.0以后得密码规则和付权限的都不同,按照网上的说法都在两个库上新建同一个账号,同样的密码,怎么弄权限都都有问题,我直接用root,问题解决,

MySQL8后密码规则变了,要使用下面语句将密码改成自然密码

mysql> ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'root的密码';

就是用navicat 能直接登录的就是自然密码,mysql8 新增的用户用navicat 是无法登录的话也是这个问题,如果一开始建立的root账号密码是错的,都没办法在服务器上登录mysql,

就去网上查下,可以直接在myslq 的配置文件上,设置成自然规则密码的

查看同步状态

# mysql -u root -p;

输入密码

mysql> show slave status \\G;

 

这两个都是yes才是正常的,否则就要排查,为了减少问题,建议按我说的来

要停止同步,只需要命令  stop slave;

开始同步命令;start slave;

忘记说了,两个服务器的防火墙都要关闭

mysql主从同步设置

主机设置
/etc/my.cnf

#ID 必须唯一
server-id=1
##二进制文件名称前缀,生成的文件mysql-bin.000001,mysql-bin.000002
log-bin=mysql-bin
##记录目前有哪些mysql-bin文件 SHOW MASTER STATUS;
log-bin-index=master-bin.index
##有更新是否立即同步到日志,性能会低,但不会丢数据。
innodb_flush_log_at_trx_commit=1
sync_binlog=1
##二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
expire_logs_days=10
##二进制文件大小,操作大小生成新文件存储(最小4096byte最大1073741824(1G)默认
max_binlog_size=1073741824
##同步哪些数据库
binlog-do-db=kintech_crm
binlog-do-db=kintech_eq
binlog-do-db=kintech_pd
binlog-do-db=kintech_sys

#二进制复制方式
binlog_format=ROW
#控制当服务器无法写入二进制日志时发生的情况,这可能导致主服务器日志变得不一致,从服务器会失去同步。
#IGNORE_ERROR忽略错误继续进行,ABORT_SERVER当发生错误不能写入二进制日志时,停止日志并关闭服务。
binlog_error_action=ABORT_SERVER

##下面配置不是必须的
##数据库编码
character-set-server=utf8
##忽略表ming大小写
lower_case_table_names=1
##开启慢查询日志,超过10秒则记录到日志
slow_query_log=1
long_query_time=10.000000
##默认值:128M 专用MySQL服务器设置的大小: 操作系统内存的70%-80%最佳。
##并不是设置的越大越好。设置的过大,会导致system的swap空间被占用,导致操作系统变慢,从而减低sql查询的效率。
innodb_buffer_pool_size=500M

创建用户
grant replication slave on *.* to [email protected]‘%‘ identified by ‘[email protected]‘;
flush privileges;

备份数据
mysqldump -u root -p --databases mytest --master-data > dbdump.db

--master-data 这个参数比较重要
1:首先在备份之前它会调用 FLUSH TABLES WITH READ LOCK 锁住数据库,数据库就不能进行写操作了。
2:它会在备份文件最上面记录 CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000002‘, MASTER_LOG_POS=154,红色的可能与你测试的不一样。
它记录了master服务器二进制日志的文件名与位置,也就是当前数据截止的位置,这样当slave启动以后,就从这个点开始复制数据。
3:然后备份数据到文件。
4:最后释放锁 UNLOCK TABLES;

将数据导入从机
scp /var/lib/mysql/dbdump.db [email protected]:/home/mysqldata/

重启主机
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;(mysql-bin.000002 154)
UNLOCK TABLES;


修改从机
my.ini

#唯一ID
server-id=2
#中继日志
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
#二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
expire_logs_days=10
relay_log_recovery=ON
relay_log_info_repository=TABLE

重启
CHANGE MASTER TO
MASTER_HOST=‘101.200.50.31‘,
MASTER_USER=‘repl‘,
MASTER_PASSWORD=‘[email protected]‘,
MASTER_LOG_FILE=‘mysql-bin.000007‘,
MASTER_LOG_POS=154;

mysql> START SLAVE;
mysql> show slave status;


































































以上是关于liunx mysql 主从同步设置 关键点的主要内容,如果未能解决你的问题,请参考以下文章

mysql主从同步-双向同步2

mysql主从同步-双向同步2

Mysql主从同步(复制)(转)

MySQL主从复制

实战mysql主从同步

线上环境mysql主从同步的搭建过程