给某个用户授权
>> grant all privileges on *.* to root@'%' identified by '密码值';
>> flush privileges;
数据库主从关系:
- 在两个服务器中my.ini配置
注释掉skip-name-resolve(如果有的话),在[mysqld]修改server-id,log-bin,binlog_format,expire_logs_days,log_bin_trust_function_creators, replicate-ignore-db,replicate-do-db等配置,改成如下配置,其中,server-id两个服务器不同:
# Server Id.
server-id=3
# Binary Logging.
log-bin="D:/ProgramData/MySQL/mysql-5.7.25-winx64/Datas/bin_log/mysql-bin"
# binary logging format - mixed recommended
binlog_format=mixed
expire_logs_days=8
log_bin_trust_function_creators=on
replicate-ignore-db=mysql
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-do-db=XXXX
replicate-ignore-table = XXXX
replicate-ignore-table = XXXX
replicate-ignore-table = XXXXX
#记录从服务器的更新
log-slave-updates=on
#忽略所有同步错误
slave-skip-errors=all
#中继日志,避免偶发的同步失败
relay-log=mysql-log-bin
上述配置修改后保存,重启mysql;
一定一定要注意,两个server-id不能相同。
- 打开A机器上Navicat,将要做主从备分的数据库备份,得到xxxA.sql;
- 打开B机器上Navicat,新建数据库xxxA,执行xxxA.sql还原数据库,得到与A一样的数据库
- 在A机器上Navicat上新建查询,执行如下sql(如果使用命令行执行以下sql,请直接在服务器上使用127.0.0.1登录mysql,避免权限问题):
CREATE USER 'repl'@'机器B' IDENTIFIED BY 'slavepass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'机器B' identified BY 'slavepass';
flush privileges;
4.在机器B上Navicat上新建查询,执行如下sql(如果使用命令行执行以下sql,请直接在服务器上使用127.0.0.1登录mysql,避免权限问题):
CREATE USER 'repl'@'A机器IP' IDENTIFIED BY 'slavepass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'A机器IP' identified BY 'slavepass';
flush privileges;
5.在A机器IP上Navicat上执行show master status;得到如下结果,记录下File和Position值;
6.在机器B上Navicat上执行show master status;得到如下结果,记录下File和Position值;
7.在A机器IP上Navicat上执行如下sql,其中master_host值服务器2的ip,master_log_file和master_log_pos为服务器2记录的File和Position值(见第6步)
------------------------------------------------
如果pos一直变,可执行以下语句:
FLUSH TABLE WITH READ LOCK;
unlock tables;
------------------------------------------------
stop slave;
reset slave;
CHANGE MASTER TO master_host = '机器B',
master_user = 'repl',
master_password = 'slavepass',
master_log_file = 'mysql-bin.000001',
master_log_pos = 2193;
start slave;
show slave status;
8.在机器B上Navicat上执行如下sql,其中master_host值服务器1的ip,master_log_file和master_log_pos为服务器1记录的File和Position值(见第5步)
stop slave;
reset slave;
CHANGE MASTER TO master_host = 'A机器IP',
master_user = 'repl',
master_password = 'slavepass',
master_log_file = 'mysql-bin.000002',
master_log_pos = 531;
start slave;
show slave status;
9.第8,9步得到的结果,如果Slave_IO_Running和Slave_SQL_Running的值都是yes,说明主主备份成功,在两个服务器的my.ini中打开skip-name-resolve注释,重启mysql。
查了半天没有解决:
你看你的配置文件是不是有个skip-name-resolve参数,把它注释掉,重启数据库服务
再执行改权限语句试下