mysql 的master-slave的搭建
发布日期:2021-09-16 04:38:53
浏览次数:69
分类:技术文章
本文共 11383 字,大约阅读时间需要 37 分钟。
为了测试半同步复制,首先搭建一套mysql 主从复制,目前我有两台机器安装的mysql版本一致5.6版本 一、设置参数文件 参数修改 : [mysqld] log_bin = mysql-bin port = 3306 character-set-server = utf8 lower_case_table_names = 1 log_error = /var/lib/mysql/mysql-error.log datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock key_buffer_size = 100M join_buffer_size = 128M sort_buffer_size = 24M read_rnd_buffer_size = 24M #innodb相关参数 default_storage_engine = INNODB innodb_buffer_pool_size = 48M innodb_log_file_size = 24M innodb_log_files_in_group = 4 innodb_log_buffer_size = 8M innodb_file_per_table = 1 innodb_additional_mem_pool_size = 32M innodb_thread_concurrency = 32 innodb_flush_method = O_DIRECT innodb_file_format=Barracuda log-bin-trust-function-creators = 1 sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES binlog-ignore-db = mysql,information_schema sync_binlog = 1 skip-external-locking skip-host-cache skip-name-resolve collation-server = utf8_general_ci long_query_time = 1 slow_query_log_file = /var/lib/mysql/mysql-slow.logmax_connections = 500
#主库添加一些mysql主从复制的参数
replicate-ignore-db = mysql # ignore 不复制 忽视 binlog-ignore-db = mysql # ignore 不更改日志二进制模式 server-id = 1 log_bin = /var/lib/mysql/mysql-bin.log #开启二进制日志复制 log_bin_index = /var/lib/mysql/mysql-bin.log.index expire_logs_days = 10 max_binlog_size = 100M从库添加的参数
#添加一些mysql主从复制的参数
replicate-ignore-db = mysql # ignore 不复制 忽视 binlog-ignore-db = mysql # ignore 不更改日志二进制模式 server-id = 2 log_bin = /var/lib/mysql/mysql-bin.log #开启二进制日志复制 log_bin_index = /var/lib/mysql/mysql-bin.log.index relay_log = /var/lib/mysql/mysql-bin.relay #从库参数 relay_log_index = /var/lib/mysql/mysql-bin.relay.index #从库参数 expire_logs_days = 10 max_binlog_size = 100M MySQL主从复制几个重要的启动选项,当然这里有些选项不是必须的,所以参数文件中没有用 (1) log-slave-updates log-slave-updates这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器B是服务器A的从服务器,同时还作为服务器C的主服务器,那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作 (2) master-connect-retry master-connect-retry这个参数是用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是60秒 (3) read-only read-only是用来限制普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户依然可以对从数据库进行更新操作 (4) slave-skip-errors 在复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。 Slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。 --slave-skip-errors=[err1,err2,…….|ALL] 但必须注意的是,启动这个参数,如果处理不当,很可能造成主从数据库的数据不同步,在应用中需要根据实际情况,如果对数据完整性要求不是很严格,那么这个选项确实可以减轻维护的成本 (5)server_id 主从配置中是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里, 我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。 relay log:relay log很多方面都跟binary log差不多,区别是:从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器。 max_relay_log_size: 标记relay log 允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小; relay_log: 定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录,文件名为host_name-relay-bin.nnnnnn (By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory) relay_log_index:同relay_log,定义relay_log的位置和名称; relay_log_info_file:设置relay-log.info的位置和名称(relay-log.info记录MASTER的binary_log的恢复位置和relay_log的位置) relay_log_purge:是否自动清空不再需要中继日志时。默认值为1(启用)。 参数设置完后,重启mysql 数据库 [root@dg mysql]# service mysql restart Shutting down MySQL.. [确定] Starting MySQL.. [确定] mysql> show master status\G; *************************** 1. row *************************** File: mysql-bin.000028 Position: 120 Binlog_Do_DB: Binlog_Ignore_DB: mysql,information_schema,mysql Executed_Gtid_Set: 1 row in set (0.00 sec) 这里我想让mysql 的日志文件从头开始,所以要重新设置 日志,reset master RESET MASTER 删除所有index file 中记录的所有binlog 文件,将日志索引文件清空,创建一个新的日志文件,这个命令通常仅仅用于第一次用于搭建主从关系的时的主库。 注意reset master 不同于purge binary log的两处地方 1. reset master 将删除日志索引文件中记录的所有binlog文件,创建一个新的日志文件 起始值从000001 开始,然而purge binary log 命令并不会修改记录binlog的顺序的数值 2. reset master 不能用于有任何slave 正在运行的主从关系的主库。因为在slave 运行时刻 reset master 命令不被支持,reset master 将master 的binlog从000001 开始记录, slave 记录的master log 则是reset master 时主库的最新的binlog,从库会报错无法找的指定的binlog文件。 RESET SLAVE reset slave 将使slave 忘记主从复制关系的位置信息。该语句将被用于干净的启动, 它删除master.info文件和relay-log.info 文件以及所有的relay log 文件并重新启用一个新的relaylog文件。 使用reset slave之前必须使用stop slave 命令将复制进程停止。 注意:所有的relay log将被删除不管他们是否被SQL thread进程完全应用(这种情况发生于备库延迟以及在备库执行了stop slave 命令),存储复制链接信息的master.info文件将被立即清除, 如果SQL thread 正在复制临时表的过程中,执行了stop slave ,并且执行了reset slave,这些被复制的临时表将被删除。 RESET SLAVE有个问题,它虽然删除了上述文件,但内存中的change master信息并没有删除,此时,可直接执行start slave,但因为删除了master.info和relay-log.info,它会从头开始接受主的binlog并应用。 RESET SLAVE ALL 在 5.6 版本中 reset slave 并不会清理存储于内存中的复制信息比如 master host, master port, master user, or master password,也就是说如果没有使用change master 命令做重新定向, 执行start slave 还是会指向旧的master 上面。 当从库执行reset slave之后,将mysqld shutdown 复制参数将被重置。 mysql> reset master; Query OK, 0 rows affected, 2 warnings (0.13 sec) mysql> show master status\G; *************************** 1. row *************************** File: mysql-bin.000001 Position: 120 Binlog_Do_DB: Binlog_Ignore_DB: mysql,information_schema,mysql Executed_Gtid_Set: 1 row in set (0.00 sec) 主库新建同步数据库需要的用户: GRANT REPLICATION SLAVE ON *.* TO 'rep'@'10.10.6.%' IDENTIFIED BY 'mysql'; 同步主从数据库: mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.00 sec) mysql> SHOW MASTER STATUS; +------------------+----------+--------------+--------------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------------+-------------------+ | mysql-bin.000001 | 325 | | mysql,information_schema,mysql | | +------------------+----------+--------------+--------------------------------+-------------------+ 1 row in set (0.00 sec) 注意保留上述信息,后面还会用到。另外,不要结束当前mysql控制台,重新打开一个窗口,导出数据库。 [root@dg ~]# mysqldump -uroot -p --all-databases > db_all.sql mysql> UNLOCK TABLES; Query OK, 0 rows affected (0.00 sec) 将导出的sql文件导入到从数据库服务器上。首先通过scp复制过去: [root@dg ~]# scp db_all.sql 10.10.6.84:/root db_all.sql 100% 13MB 13.2MB/s 00:01 从服务器的操作: mysql -uroot -p < db_all.sql mysql> flush privileges;Query OK, 0 rows affected (0.03 sec)
mysql> reset slave; Query OK, 0 rows affected (0.00 sec) mysql> CHANGE MASTER TO master_host='10.10.6.86', master_port=3306, master_user='rep',master_password='mysql', master_log_file='mysql-bin.000001', master_log_pos=325; Query OK, 0 rows affected, 2 warnings (0.35 sec) mysql> show warnings -> ; +-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Note | 1759 | Sending passwords in plain text without SSL/TLS is extremely insecure. | | Note | 1760 | Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. | +-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.10.6.86 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 325 Relay_Log_File: mysql-bin.000008 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 325 Relay_Log_Space: 120 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 1593 Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it). Last_SQL_Errno: 0 此处错误是因为 主从的id设置的一样了,从库的id忘记修改参数文件的server-id = 1 ,导致主从id一样修改参数文件,并且重启数据库查看
mysql> show variables like 'serv%'; +----------------+--------------------------------------+ | Variable_name | Value | +----------------+--------------------------------------+ | server_id | 2 | | server_id_bits | 32 | | server_uuid | 2d544f28-bbae-11e6-9ab0-005056917e27 | +----------------+--------------------------------------+ 3 rows in set (0.00 sec) mysql> reset slave; ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first mysql> mysql> mysql> stop slave; Query OK, 0 rows affected (0.05 sec) mysql> reset slave; Query OK, 0 rows affected (0.11 sec) mysql> CHANGE MASTER TO master_host='10.10.6.86', master_port=3306, master_user='rep',master_password='mysql', master_log_file='mysql-bin.000001', master_log_pos=325; Query OK, 0 rows affected, 2 warnings (0.24 sec) mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.10.6.86 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 325 Relay_Log_File: mysql-bin.000012 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: No Slave_SQL_Running: No mysql> start slave; Query OK, 0 rows affected (0.02 sec) mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.10.6.86 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 325 Relay_Log_File: mysql-bin.000013 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: mysql 验证: 主库: mysql> create database t; Query OK, 1 row affected (0.03 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | t | | test | +--------------------+ 5 rows in set (0.00 sec) mysql> use t; Database changed mysql> create table t(id int,a varchar(10)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED -> ; Query OK, 0 rows affected (0.24 sec) mysql> insert into t values(1,'a'); Query OK, 1 row affected (0.05 sec) mysql> insert into t values(2,'a'); Query OK, 1 row affected (0.07 sec) mysql> insert into t values(3,'a'); Query OK, 1 row affected (0.05 sec) 从库 查看: mysql> select * From t; +------+------+ | id | a | +------+------+ | 1 | a | | 2 | a | | 3 | a | +------+------+ 3 rows in set (0.00 sec) 至此主从master-slave已经建立起来了转载地址:https://blog.csdn.net/wll_1017/article/details/54890167 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年03月31日 09时11分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
你不得不了解的深度学习知识(二)
2019-04-26
AI算法之Encoder-Decoder 和 Seq2Seq
2019-04-26
AI算法之Attention机制
2019-04-26
人体口罩佩戴检测实战
2019-04-26
[YoLoV3目标检测实战] keras+yolov3训练自身口罩检测数据集
2019-04-26
[实战]200类鸟类细粒度图像分类
2019-04-26
【实战】英文垃圾短信分类
2019-04-26
FFmpeg初遇见_基本命令
2019-04-26
Urbansound8k声音分类深度学习实战
2019-04-26
pytorch版本下的yolov3训练实现火焰检测
2019-04-26
yolov4训练自己的数据集实现安全帽佩戴检测
2019-04-26
EfficientDet训练自己的数据集实现抽烟检测
2019-04-26
【工具篇】10分钟快速上手git与github
2019-04-26
【开发篇】10分钟快速上手spring boot
2019-04-26
【开发篇】10分钟快速spring boot+react前后端分离
2019-04-26
【开发篇】10分钟快速上手spring boot+mybatis增删改查
2019-04-26
【Leetcode刷题篇】leetcode203 移除链表元素
2019-04-26
【Leetcode刷题篇】leetcode108 将有序数组转换为二叉搜索树
2019-04-26
【Leetcode刷题篇】leetcoe109 有序链表转换二叉搜索树
2019-04-26
【Leetcode刷题篇】leetcode938 二叉搜索树的范围和
2019-04-26