mysql主从复制配置

1.mysql配置文件内容及含义阐述。

mysql主服务器配置文件 my.cnf

[client]
password = 123456
port = 3306
socket = /data/mysql/3306/mysql_3306.sock
default-character-set=utf8

[mysqld]
port = 3306
socket = /data/mysql/3306/mysql_3306.sock
pid-file = /data/mysql/3306/mysql.pid
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/3306/data
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
max_connections=1000
#server_id局域网内不能重复,可以设置为ip的末端号。
server_id=125
#开启二进制日志功能,名字可以自定义。
log-bin=mysql-bin
binlog_cache_size=1M
binlog_format=mixed
slave_skip_errors=1062

mysql从服务器配置文件 my.cnf

[client]
password = 123456
port = 3306
socket = /data/mysql/3306/mysql_3306.sock
default-character-set=utf8

[mysqld]
port = 3306
socket = /data/mysql/3306/mysql_3306.sock
pid-file = /data/mysql/3306/mysql.pid
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql/3306/data
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
max_connections=1000
server_id=126
#从库设置只读,主库可读可写。
read_only=1
#设置不要复制的数据库(可设置多个)
#binlog-ignore-db=information_schema
#设置需要复制的数据库
#binlog-do-bd=test_db1
#binlog-do-db=test_db2
#开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
#relay_log配置中继日志,slave将master的binary log events拷贝到它的中继日志(relay log)
relay_log=edu-mysql-relay-bin
binlog_cache_size=1M
#设置logbin格式
binlog_format=mixed
slave_skip_errors=1062

2.如果mysql服务已经开启,要重新启动来加载新的配置文件。

#关闭mysql服务
mysqladmin  -uroot -p -S  /data/mysql/3306/mysql_3306.sock  shutdown
#再次开启mysql服务(2是错误输出,1是标准输出,2>&1是说错误输出等于标准输出,>/dev?null是说输出到空洞,也就是说输出要被丢弃)
mysqld_safe --defaults-file=/data/mysql/3306/my.cnf   2>&1 > /dev/null &

3.mysql主服务器配置:

#登录mysql服务
mysql -uroot -p -S /data/mysql/3306/mysql_3306.sock

#查看二进制日志是否开启(配置文件里配置)
mysql>show global variables like '%log%';
#显示下文为开启
log_bin ON

#查看主服务器server_id(这个是在配置文件设置的)
mysql>show global variables like '%server%';
server_id 125

#创建slave用户,'%'是任意IP都可以登录,安全性要求高的情况下,密码建议使用随机生成的字符串
mysql>create user 'slave'@'%' identified by '这是密码建议使用生成的随机字符串'

#REPLICATION CLIENT:授予此权限,复制用户可以使用 SHOW MASTER STATUS, SHOW SLAVE STATUS和 SHOW BINARY LOGS来确定复制状态。
#REPLICATION SLAVE:授予此权限,复制才能真正工作。
#复制账号需要以上两个权限。
mysql>grant replication slave, replication client on *.* to 'slave'@'%' identified by '这里填密码';

# 刷新配置
mysql>flush  privileges;

#查看当前写的二进制日志文件File和偏移量Position(mysql从服务器配置需要该信息)
#配置文件和偏移量在从服务器配置以后,之后在主服务器运行的命令就会写入日志,然后从服务器也会读日志,然后运行相同的命令。
mysql>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |     2595 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

4.mysql从服务器配置:

#登录mysql服务
mysql -uroot -p -S /data/mysql/3306/mysql_3306.sock

#mysql从服务器执行填写主服务器ip,主服务器用来复制的用户名和密码,填写主服务器上查到的二进制日志文件名和偏移量。
mysql>change master to master_host='192.168.0.125',master_user='slave', master_password='这里填slave用户的密码',master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=2595, master_connect_retry=30;

#开启主从复制
mysql>start slave;

#查看从节点状态
#  \G,表示将查询结果进行按列打印,横向表格纵向输出,可以使每个字段打印到单独的行(更加规范)
#  \g 等价于 ';'
mysql>show slave status \G;
#返回的这两项都为Yes,表示主从复制正常开启。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


#如果遇到错误可以用下面的办法处理:
#停止主从复制:
mysql> stop slave;
#跳过错误:
mysql> set global sql_slave_skip_counter=1;
#启动slave
mysql> start slave;

5.测试主从复制

#mysql主服务器登录mysql服务
mysql -uroot -p -S /data/mysql/3306/mysql_3306.sock

#查看数据库
mysql>show databases;

#创建一个测试数据库
mysql>create database my_test;

#可以在mysql主服务器和mysql从服务器分别查看数据库(发现多了新创建的数据库my_test)
mysql>show databases;

#创建一个非root的日常用户(也是mysql主服务器运行)
mysql>create user 'my_user_1'@'%'  identified by '这里填想设置的密码';

#给my_test用户赋对my_test数据库任何操作的权力。
grant all on my_test.* to 'my_user_1'@'%';

#然后就可以使用my_test用户用navicat连接主数据库和从数据库了。
#因为主从复制的原因,从数据库也会被自动创建一个该名称该密码该权限的用户(不过从服务器只能读,不可以写。)

参考文章:
https://blog.csdn.net/andyguan01_2/article/details/107005913
https://blog.csdn.net/weixin_43760113/article/details/130682825
https://blog.csdn.net/qq_40813329/article/details/123213790
https://blog.csdn.net/shgh_2004/article/details/89332333

你可能感兴趣的:(mysql,数据库,服务器)