配置Master服务
设置my.cnf配置文件
主要需要修改的是以下几个属性:
server-id:服务节点的唯一标识。需要给集群中的每个服务分配一个单 独的ID。
log_bin:打开Binlog日志记录,并指定文件名。
log_bin-index:Binlog日志文件
server-id=4#开启binloglog_bin=master-binlog_bin-index=master-bin.indexskip-name-resolve# 设置连接端口port=3306# 设置mysql的安装目录basedir=/var/lib/mysql# 设置mysql数据库的数据的存放目录datadir=/var/lib/mysql/mysql-files# 允许最大连接数max_connections=200# 允许连接失败的次数。max_connect_errors=10# 服务端使用的字符集默认为UTF8character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证#mysql_native_passworddefault_authentication_plugin=mysql_native_password
修改MySQL密码
$ vim /etc/my.cnf# 新增以下这行,用于跳过授权表skip-grant-tables$ systemctl restart mysqld.service$ mysql -u root -p# 无需输入密码直接回车mysql>use mysql;mysql>update mysql.user set authentication_string=password('Abc123!_') where user='root';mysql>flush privileges;mysql>quit;
需要给root用户分配一个replication slave的权限。在实际生产环境中,通常不会直接使用root用户,而会创建一个拥有全 部权限的用户来负责主从同步。
# 查询host登录的权限是不是%,如果是localhost只能允许本地登录mysql> select host,user from user;mysql> update user set host = '%' where user = 'root';mysql> GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';mysql> flush privileges;#查看主节点同步状态:mysql> show master status;

这个指令结果中的File和Position记录的是当前日志的binlog文件以及文件中的索 引。 而后面的Binlog_Do_DB和Binlog_Ignore_DB这两个字段是表示需要记录binlog 文件的库以及不需要记录binlog文件的库。目前我们没有进行配置,就表示是针对全库记录日志。
开启binlog后,数据库中的所有操作都会被记录到datadir当中,以一组 轮询文件的方式循环记录。而指令查到的File和Position就是当前日志的 文件和位置。而在后面配置从服务时,就需要通过这个File和Position通 知从服务从哪个地方开始记录binLog。
配置slave服务
设置my.cnf
主要需要关注的几个属性:
server-id:服务节点的唯一标识
relay-log:打开从服务的relay-log日志。
log-bin:打开从服务的bin-log日志记录。
#主库和从库需要不一致 server-id=5 #打开MySQL中继日志 relay-log-index=slave-relay-bin.index relay-log=slave-relay-bin #打开从服务二进制日志 log-bin=mysql-bin #使得更新的数据写进二进制日志中 log-slave-updates=1 # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=/var/lib/mysql # 设置mysql数据库的数据的存放目录 datadir=/var/lib/mysql/mysql-files # 允许最大连接数 max_connections=200 # 允许连接失败的次数。 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 #mysql_native_password default_authentication_plugin=mysql_native_password
设置slave同步状态
启动mysqls的服务,并设置他的主节点同步状态。
#设置同步主节点:mysql> CHANGE MASTER TO MASTER_HOST='192.168.40.4', MASTER_USER='root', MASTER_PASSWORD='Abc123!_', MASTER_LOG_FILE='master-bin.000005',MASTER_LOG_POS=1393;#开启slavemysql> start slave;#查看主从同步状态mysql> show slave status;或者用 show slave status \G; 这样查看比较简洁
注意,CHANGE MASTER指令中需要指定的MASTERLOG_FILE和 MASTER_LOG_POS必须与主服务中查到的保持一致。 并且后续如果要检查主从架构是否成功,也可以通过检查主服务与从服 务之间的File和Position这两个属性是否一致来确定。
我们重点关注其中红色方框的两个属性,与主节点保持一致,就表示这个主从同 步搭建是成功的。 从这个指令的结果能够看到,有很多Replicate开头的属性,这些属性指 定了两个服务之间要同步哪些数据库、哪些表的配置。只是在我们这个 示例中全都没有进行配置,就标识是全库进行同步。后面我们会补充如 何配置需要同步的库和表。
验证主从同步
主从同步失败
这个主从架构是有可能失败的,如果在slave从服务上查看slave状 态,发现Slave_SQL_Running=no,就表示主从同步失败了。这有可能 是因为在从数据库上进行了写操作,与同步过来的SQL操作冲突了,也 有可能是slave从服务重启后有事务回滚了。 如果是因为slave从服务事务回滚的原因,可以按照以下方式重启主从同 步:
如果是因为slave从服务事务回滚的原因,可以按照以下方式重启主从同步:
mysql> stop slave ;mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;mysql> start slave ;
另一种解决方式就是重新记录主节点的binlog文件消息,但是这种方式要注意binlog的文件和位置,如果修改后和之前的同步接 不上,那就会丢失部分数据。所以不太常用。
mysql> stop slave ;mysql> change master to .....mysql> start slave ;
