mysql主从配置

配置前准备

1、准备2个mysql环境
2、两个mysql网络互通

mysql安装还是比较简单的,这里不在复述, 这里用的mysql5.7;

mysql主从最好在数据库服务搭建之初就配置好,不然后续再配置比较麻烦,如果是生产环境,涉及到添加配置、重启等;

 

一、更改主从mysql的配置文件

1、master:

[mysql]
default-character-set=utf8mb4

[client]
port = 3306
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

user = mysql
bind-address = 0.0.0.0
character-set-server = utf8mb4
max_connections = 2000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128

default_storage_engine = InnoDB
innodb_buffer_pool_size = 4G
interactive_timeout = 28800
wait_timeout = 28800

character-set_server=utf8mb4
collation-server=utf8mb4_bin
lower_case_table_names=1
init_connect='SET NAMES utf8'

######主从相关配置值######
server-id = 1        # 节点ID,确保唯一
log-bin = mysql-bin     #开启mysql的binlog日志功能,binlog日志位置
sync_binlog = 1         #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed   #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7                           #binlog过期清理时间
max_binlog_size = 100m                    #binlog每个日志文件大小
binlog_cache_size = 4m                        #binlog缓存大小

binlog-do-db=test1 #需要同步的数据库
binlog-do-db=test2 #需要同步的数据库
slave-skip-errors = all #跳过从库错误

[mysqldump]
max_allowed_packet = 128M

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M

 

2、slave:

[mysql]
default-character-set=utf8mb4

[client]
port = 3306
default-character-set=utf8

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

user = mysql
bind-address = 0.0.0.0
character-set-server = utf8mb4
max_connections = 2000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128

default_storage_engine = InnoDB
innodb_buffer_pool_size = 4G
interactive_timeout = 28800
wait_timeout = 28800

character-set_server=utf8mb4
collation-server=utf8mb4_bin
lower_case_table_names=1
init_connect='SET NAMES utf8'


######主从相关配置值######
server-id = 2        # 节点ID,确保唯一
log-bin = mysql-bin     #如果从数据库,不需要再往其他数据库同步,可以注释掉
relay-log=slave-relay-bin #必须开启,从主数据库同步的binlog会写入到该目录下
relay-log-index=slave-relay-bin
relay_log_recovery=1
relay_log_purge=1 #如果主从数据库名称相同 #replication
-do-db=数据库名 #如果主从数据库名称不同 #replication-rewrite-db= 主数据库名 -> 从数据库名 [mysqldump] max_allowed_packet = 128M [myisamchk] key_buffer_size = 8M sort_buffer_size = 8M read_buffer = 4M write_buffer = 4M

重启主从mysql服务;

 

二、master配置

1、创建一个用户名为rep,密码为123456的账户,该账户可以被192.168.253网段下的所有ip地址使用,且该账户只能进行主从同步:

mysql > grant replication slave, REPLICATION CLIENT on *.* to ‘rep’@‘192.168.253.%’ identified by ‘123456’;
mysql> FLUSH PRIVILEGES;

 

2、刷新所有的表,同时给数据库加上一把锁,阻止对数据库进行任何的写操作:

mysql > flush tables with read lock;

 

3、获取master二进制日志的信息:

mysql > show master status;

 File的值是当前使用的二进制日志的文件名,Position是该日志里面的位置信息,记住这两个值,会在下面配置从服务器时用到。

如果之前的服务器并没有配置使用二进制日志,那么使用上面的sql语句会显示空;

 

4、在锁表之后,导出数据库里的数据(如果数据库里没有数据,可以忽略这一步):

[root@master]# mysqldump -uroot -p'123456' -S /data/3306/data/mysql.sock --all-databases > /server/backup/mysql_bak.$(date +%F).sql

如果数据量很大,可以在导出时就压缩为原来的大概三分之一:

[root@master]# mysqldump -uroot -p'123456' -S /data/3306/data/mysql.sock --all-databases | gzip > /server/backup/mysql_bak.$(date +%F).sql.gz

 

5、对数据库解锁,恢复对主数据库的操作

mysql > unlock tables;

 

三、slave配置

1、如果主服务器导出了数据,下面就导入该文件,如果主服务器没有数据,就忽略这一步

如果从主服务器上拿过来的是压缩文件,就先解压再导入

[root@slave]# mysql -uroot -p'123456' -S /data/3306/data/mysql.sock < /server/backup/mysql_bak.2015-07-01.sql

 

2、配置同步参数,登陆mysql,执行如下命令

CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS='POS',

 

3、启动主从同步进程

mysql > start slave;

查看状态:

mysql > show slave status\G

 上面的两个进程都显示YES则表示配置成功;

 

四、测试

此时可以创建表,插入数据,看slave是否会自动同步过来;

 

relay_log_recovery

posted @ 2023-05-24 17:10  米兰的小铁將  阅读(941)  评论(0编辑  收藏  举报