Mysql 主从服务器搭建及配置详解

前提:一主一从服务器已经搭建完毕

mysql 主从服务器搭建与配置

主-master:192.168.1.77

从-salve:192.168.1.76

 

需要使用到的账号:

用户: admin   密码: [email protected] (数据库管理员账号)

用户: javauser  密码: 123456@mysql (程序数据库账号)

用户: administrator 密码: mysql2019.com(增删改查账号)

用户: test 密码: 123456(查寻账号)

用户:sync_user 密码:sync_user@123.#* (主从复制账号)

 

master-配置mysql 主服务器-192.168.1.77

配置mysql 主服务器

# vi /etc/my.cnf

max_connections = 5000 ##修改/etc/my.cnf 的最大连接数

server-id = 77 ##该ID为mysql服务唯一标识,主从服务器的该ID值不能相同!

 

重启mysql

# systemctl restart mysql

登陆数据库

# mysql -u root -p

创建admin数据库管理员账号,并赋予全部权限

mysql> create user 'admin'@'192.168.%.%';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.%.%' IDENTIFIED BY '[email protected]' WITH GRANT OPTION;

创建javauser程序数据库账号,并赋予增删改查权限

mysql> create user 'javauser'@'192.168.%.%';

mysql> GRANT Select,Update,insert,delete ON *.* TO 'javauser'@'192.168.%.%' IDENTIFIED BY '123456@mysql';

创建administrator增删改查账号,并赋予增删改查权限

​
mysql> create user 'administrator'@'192.168.%.%';

mysql> GRANT Select,Update,insert,delete ON *.* TO 'administrator'@'192.168.%.%' IDENTIFIED BY 'mysql2019.com';

​

创建test查询账号,并赋予查询权限

mysql> create user 'test'@'192.168.%.%';

mysql> GRANT Select ON *.* TO 'test'@'192.168.%.%' IDENTIFIED BY '123456';

创建sync_user主从复制账号

mysql> create user 'sync_user'@'192.168.%.%';

mysql> grant syncication slave on *.* to 'sync_user'@'192.168.%.%' identified by 'sync_user@123.#*';

刷新权限关系表

mysql> flush privileges;

查看master状态:

mysql> show master status\G;

 

slave-登陆从服务器-192.168.1.78

配置mysql 从服务器

# vi /etc/my.cnf

max_connections = 5000 ##修改/etc/my.cnf 的最大连接数

server-id = 78 ##该ID为mysql服务唯一标识,主从服务器的该ID值不能相同!

重启mysql

# systemctl restart mysql

登陆mysql

# mysql -u root -p

#执行同步命令,设置主服务器ip,同步账号密码,同步位置

mysql> change master to master_host = '192.168.1.77',master_port = 3306,master_user = 'sync_user',master_password = 'sync_user@123.#*';

#开启同步功能

mysql> start slave;

查看从服务器状态

mysql> show slave status\G;

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.77
                  Master_User: sync_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: bin.000001
          Read_Master_Log_Pos: 2889
               Relay_Log_File: relay.000003
                Relay_Log_Pos: 3090
        Relay_Master_Log_File: bin.000001
             Slave_IO_Running: Yes  ######必须是两个YES,如果有任何一个为NO,则有问题
            Slave_SQL_Running: Yes  ######

这两项为YES,则说明主从配置成功!

 

其他报错及排查过程:

mysql> start slave;

ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

解释:relay log 文件:由IO thread线程从主库读取的二进制日志事件组成,该日志被Slave上的SQL thread线程执行,从而实现数据的复制。由于mysql.slave_relay_log_info表中保留了以前的复制信息,导致新从库启动时无法找到对应文件。

解决:

mysql> reset slave;

mysql> change master to master_host = '192.168.1.77',master_port = 3306,master_user = 'sync_user',master_password = 'sync_user@123.#*';

mysql> start slave;

mysql> show slave status\G;

 

Error 'Operation CREATE USER failed for 'javauser'@'192.168.%.%'' on query. Default database: ''. Query: 'CREATE USER 'javauser'@'192.168.%.%' IDENTIFIED WITH 'mysql_native_password''

解释,因为从服务器上提前新建好了用户,它需要去同步主服务器的用户,所有报错,在做主从的时候,只需要主服务器创建用户就可以了,从服务器无需创建用户操作,会自动同步的

解决:

mysql> drop user 'javauser'@'192.168.%.%';

mysql> flush privileges;

mysql> stop slave;

mysql> reset slave;

mysql> start slave;

mysql> show slave status\G;

 

[ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for syncication to work (or the --syncicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it). Error_code: 1593

分析:报错已经给出了:“syncicate-same-server-id”,说明是配置文件中主从的server-id 一致了。

解决:

修改主从的/etc/my.cnf 配置项server-id 使其不一致,再重启mysql。

 

你可能感兴趣的:(mysql,mysql主从,linux技术分享)