mysql主从服务搭建

1、主mysql配置信息

配置文件路径:/etc/mysql/mysql.conf.d/mysqld.cnf
log_bin=‘mysql-bin’      # 必须设置、启动二进制日志
server-id=12             #  必须设置、保证每个服务器设置id不相同
binlog-do-db=osyunweidb  # 需要同步的数据库名称、可以写多行表示同步多个数据库
binlog-ignore-db=mysql   # 需要忽略的数据库、不进行同步

2、从mysql配置信息


配置文件路径:/etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address= 127.0.0.1  # 允许外网链接
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION   #datetime类型可以设置为0 
group_concat_max_len = 102400  #  拼接字符串长度 
log_bin=‘mysql-bin2’      # 必须设置、启动二进制日志
server-id=11              #  必须设置、保证每个服务器设置id不相同
replicate-do-db           # 指定需要复制的数据库。 
replicate-ignore-db       # 复制时需要排除的数据库

3、设置外网主机以root身份登陆、重启主从mysql服务

 1、登陆自己机器的MySQL数据库:mysql -uroot -p密码
设置root用户可以任意IP访问,代码如下(可选,这里%代表任意,也可以指定IP):  
update user set host = '%' where user = 'root'; 
        
2、GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;
        予任何主机访问数据的权限   这里youpassword  换成你的数据库登录密码
    
3、MySQL>FLUSH PRIVILEGES;
        修改生效,这样就可以在其它任何的主机上以root身份登录啦!

$sudo service mysql restart

4、进入主服务器sql中 执行下面命令

show master status\G
image.png

第一行,当前正在记录的 binarylog文件名;
第二行,表示当前的文件偏移量,写入在上面文件的记录位置;
第三行,表示需要记录的数据库;
第四行,表示需要忽略的数据库;
只有需要记录的数据库,其变化才会被写入到日志文件中。

5、数据同步

1、备份前先把数据库加上锁,以保证备份时不会写入新数据导致数据不一致

  flush tables with read lock;

2、在备份服务器中新建数据库名称与主数据库相同、主服务器中执行下述命令:
  mysqldump --default-character-set=utf8mb4 --host=127.0.0.1 -ualgo_wb -palgo_wb --opt algo_wyh | mysql --host=192.168.0.106 -ualgo_wb -palgo_wb --default-character-set=utf8mb4 -C algo_wyh

3、从mysql输入下述命令:
CHANGE MASTER TO 
MASTER_HOST='主mysql服务器的IP地址', 
MASTER_USER='主mysql用户名', 
MASTER_PASSWORD='主mysql密码', 
MASTER_LOG_FILE='mysql-bin.000004', 对应主mysql中file内容
MASTER_LOG_POS=7145;对应主mysql中position内容

6、启动服务器slave

1、启动slave
  start slave;
2、停止slave
  stop slave;

7、查看slave状态

show slave status\G 
image.png

Master_host 指的是 主服务器的地址
Master_user 指的是主sql服务器上用来复制的用户,从服务器会用此账号来登录主服务进行复制
Master_log_file 主sql服务日志文件名
Read_Master_log_pos 主sql日志记录位置(多少行开始), 从服务器根据日志文件名与这个记录位置选择复制的文件和位置
Slave_IO_Running: 指的就是从服务器上负责读取主服务器的线程工作状态。 从服务器用这个专门的线程链接到主服务器上,并把日志拷贝回来。
Slave_SQL_Running: 指的就是专门执行sql的线程。 它负责把复制回来的Relaylog执行到自己的数据库中。 这两个参数必须都为Yes 才表明复制在正常工作。

8、取消 lock锁限制

  unlock tables;

你可能感兴趣的:(mysql主从服务搭建)