本文基于MySQL 5.7记录
一、安装
1、二进制安装
1 | 创建mysql相关的组和用户 |
2、rpm/deb软件源安装
以CentOS7为例
1 | 获取MySQL软件源 |
3、源码安装
以CentOS7为例
1 | 安装编译环境 |
4、安装后设定
4.1、安全设置
1 | mysql_secure_installation |
4.2、建议设置
关闭主机名反向解析,在配置文件的[mysqld]里面添加skip_name_resolve = 1
1 | vi /etc/my.cnf |
5、数据库连接
5.1、mysql命令行客户端
1 | mysql -uroot -ppassword -h127.0.0.1 -P3306 -D db1 |
5.2、MySQL Benchmark图形客户端
6、获取MySQL编译的参数
在MySQL目录的docs/INFO_BIN
1 | 例如安装目录为/usr/local/mysql |
二、配置数据库
1、配置文件路径
文件优先级,同一个参数以最后一个为准,启动时可指定–default-file=/path/to/my.cnf
- /etc/my.cnf
- /etc/mysql/my.cnf
- $MYSQL_HOME/my.cnf
- –default-extra-file=/path/to/*.cnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139[client]
port = 3306
socket = /data/mysql/mysql.sock
[mysql]
prompt="\u@mysqldb \R:\m:\s [\d]> "
no-auto-rehash
[mysqld]
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /data/mysql/
socket = /data/mysql/mysql.sock
pid-file = mysqldb.pid
character-set-server = utf8mb4
skip_name_resolve = 1
open_files_limit = 65535
back_log = 1024
max_connections = 512
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instances = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 768
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 96M
max_heap_table_size = 96M
slow_query_log = 1
slow_query_log_file = /data/mysql/slow.log
log-error = /data/mysql/error.log
long_query_time = 0.1
log_queries_not_using_indexes =1
log_throttle_queries_not_using_indexes = 60
min_examined_row_limit = 100
log_slow_admin_statements = 1
log_slow_slave_statements = 1
server-id = 3306
log-bin = /data/mysql/mybinlog
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
expire_logs_days = 7
master_info_repository = TABLE
relay_log_info_repository = TABLE
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'
binlog_format = row
binlog_checksum = 1
relay_log_recovery = 1
relay-log-purge = 1
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_thread_concurrency = 0
innodb_sync_spin_loops = 100
innodb_spin_wait_delay = 30
transaction_isolation = REPEATABLE-READ
#innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 45875M
innodb_buffer_pool_instances = 4
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_max_undo_log_size = 2G
innodb_undo_directory = undolog
innodb_undo_tablespaces = 8
# 根据您的服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 2G
internal_tmp_disk_storage_engine = InnoDB
innodb_stats_on_metadata = 0
# some var for MySQL 8
log_error_verbosity = 3
innodb_print_ddl_logs = 1
binlog_expire_logs_seconds = 604800
#innodb_dedicated_server = 0
innodb_status_file = 1
# 注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快
innodb_status_output = 0
innodb_status_output_locks = 0
#performance_schema
performance_schema = 1
performance_schema_instrument = '%=on'
#innodb monitor
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
[mysqld_safe]
[mysqld_multi]
[mysqldump]
quick
max_allowed_packet = 32M
[server]
2、数据库变量
2.1、查看数据库全局变量
1 | mysql> show global variables; |
2.2、查看数据库会话变量
1 | mysql> show session variables; |
3、开启MySQL SSL功能
1 | 使用MySQL自带工具生成证书 |
1 | # 查看数据库SSL变量 |
1 | 使用SSL证书登录数据库 |
三、事务隔离
一组原子性SQL操作,或者是独立的工作单元。
1、ACID
1.1、Atomicity原子性
整个事务中的所有操作要么全部执行成功,要么失败后完全回滚。
1.2、Consistency一致性
数据库总是从一个一致性状态转换到另一个一致性状态。
1.3、Isolation隔离性
一个事务的操作在提交之前,不能被其他会话所见。
可分为多个隔离级别
1.4、Durability永久性
事务一旦提交,操作结果将永久保存到数据库中。
2、锁机制
2.1、写锁
其他事务不能读取,也不能写。
2.2、读锁
其他事务可以读,但不能写。
3、脏读
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
4、不可重复读
是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
5、幻读
指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
6、事务隔离级别
默认是REPEATEABLE READ 可重复读
6.1、READ UNCOMMITED读未提交
事务间完全不隔离,会产生脏读,可以读取未提交的记录。
6.2、READ COMMITED读已提交
仅能读取到已提交的记录,不会脏读,会不可重复读,会幻读。
6.3、REPEATABLE READ可重复读
每次读取的结果集都相同,而不管其他事务有没有提交,但是无法阻止其他事务插入数据,因此可能导致幻读。
6.4、SERIALIZABILE可串行化
最严格的锁,在事务完成前,其他事务无法对数据对象进行写操作。并行性能最差。
四、数据库日志
1、查询日志 query log
记录查询操作,产生额外IO消耗,一般不打开。
1 | mysql> show global variables like '%general%'; |
2、慢查询日志 slow query log
执行时长超过指定时长的查询操作
1 | mysql> show global variables like 'long_query_time'; |
3、错误日志 error log
记录MySQL启动关闭过程输出的日志
记录MySQL运行过程中产生的错误日志
记录event scheduler运行event时产生的日志
记录主从复制架构中从服务器上启动从服务器线程时产生的日志
1 | > show global variables like '%error%'; |
4、二进制日志 binary log
4.1、介绍
记录对mysql数据更新或潜在发生更新的SQL语句,并以”事务”的形式保存在磁盘中。
用于通过“重放”日志生成数据副本。
4.2、日志记录内容
基于“语句”记录:statement
基于“行”记录:row
混合模式:mixed,由数据库自动判定
4.3、日志文件构成
日志文件:mysql-bin,二进制格式
索引文件:mysql-bin.index,文本格式
1 | mysql > show global variables like '%bin%'; |
1 | mysql > show binary logs; |
4.4、mysqlbinlog工具读取二进制日志
基于时间点
1 | mysqlbinlog -uroot -pxvnCv3Yz -hlocalhost -P3306 --start-datetime='2018-10-23 00:00:00' --stop-datetime='2018-10-24 13:00:00' -d myblog /mysql_data/mybinlog.000002 |
基于position
1 | mysqlbinlog -uroot -pxvnCv3Yz -hlocalhost -P3306 --start-position=10613 --stop-position=11684 -d myblog /mysql_data/mybinlog.000002 |
4.5、二进制日志事件的格式
1 | # at 11305 |
事件发生的日期和时间: 181024 11:38:30
事件发生的服务器标识: server id 3306
事件结束位置: end_log_pos 11684
事件类型: Query
事件发生时所在服务器执行此事件的线程ID: thread_id=32
语句的时间戳与写入二进制文件的时间差: exec_time=0
错误代码: error_code=0
事件内容
1 | SET TIMESTAMP=1540352310/*!*/; |
GTID:Global Transaction ID;全局事务ID
5、中继日志 relay log
主从复制架构中,从服务器将主服务器的二进制日志事件拷贝到自己的中继日志。
6、事务日志 transaction log
由数据库引擎自行管理。
当有更新操作时,存储引擎只将数据在内存中的copy修改成更新后的值,但并不将数据的更新刷新的硬盘,只是将更新操作的行为记录到硬盘上的事务日志中。因为事务日志的记录是采用文件追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头。
因此事务日志的记录是非常快的。
事务日志由多个日志文件组组成,循环使用日志文件。
事务日志的大小需要根据实际情况设定。
6.1、重做日志redo log
用于记录修改后的数据,顺序记录,可以根据这个文件的记录内容重新恢复数据。
6.2、回滚日志undo log
用于存放被修改前的数据,回滚操作,实现事务一致性。
五、备份还原
1、为什么要备份
- 灾难备份
- 硬件故障
- 软件故障
- 自然灾害
- 黑客攻击
- 人为操作
- 业务测试
2、注意事项
- 能容忍丢失多少数据
- 备份操作持锁时长
- 备份负载
- 恢复数据的时长
- 需要恢复哪些数据
- 备份的有效性
- 备份恢复测试和演练
- 生产数据和备份数据分开存放
3、备份类型
- 热备:备份过程数据库可读可写
- 温备:备份过程数据库可读不可写
- 冷备:备份过程数据库不可读不可写
- 全量备份:完整数据集
- 增量备份:仅备份最近一次全备或者增备以来变化的数据
- 差异备份:仅备份最近一次全备以来变化的数据
- 物理备份:块级别备份,备份数据文件
- 逻辑备份:从数据库导出数据,与存储引擎无关,可用于数据迁移
4、备份内容
- 数据
- 二进制日志、InnoDB事务日志
- 配置文件
- 代码(存储过程、存储函数、触发器、事件调度器)
5、逻辑备份工具
Schema和数据存储在一个巨大的单个SQL语句文件5.1、mysqldump
MyISAM:备份库添加只读锁,直至备份完成
默认导出所有数据库的所有表
锁定方法(对InnoDB有效实现温备):
–lock-all-tables 锁定所有库的所有表
–log-tables 对于每个单独的数据库,在启动备份前锁定其所有表
InnoDB:支持热备、温备
–single-transaction 设置本次会话隔离级别为Repeatable Read,确保本次会话不会看到其他会话提交的数据,保证数据一致性
命令说明
1 | 备份指定数据库或者数据库中的表 |
命令示例
1 | 备份数据库db1,导出为db1.sql |
6、物理备份
6.1、xtrabackup
适用于InnoDB和XtraDB,一般使用innobackupex(xtrabackup的命令简化版)
安装
1 | 下载xtrabackup二进制包 |
命令说明
1 | 全量备份整个数据库(包括配置文件、二进制日志、重做日志、回滚日志、数据文件) |
6.2、其他备份工具
LVM快照
1
2
3
4
5
6
7
8
9
10
11# 锁定所有表
mysql > flush tables with read lock;
# 记录二进制日志文件和事件位置
mysql > flush logs;
mysql -e 'show master status' > /path/to/file
# 创建快照
lvcreate -L # -s -p r -n NAME /dev/vg_name/lv_name
# 释放锁
mysql > unlock tables;
# 挂载快照卷,执行数据备份
# 备份完成删除快照卷
六、主从复制
1、主节点
dump thread:为每个Slave的IO Thread 启动一个dump线程,向其发送binary log events
2、从节点
IO Thread:从Master请求binary log events,并保存到中继日志
SQL Thread:从中继日志读取日志事件,在本地完成重放
3、特点
- Mater和Slave之间是异步复制
- 主从数据不一致的情况比较常见
4、复制架构
4.1、主从复制
4.1.1、主节点配置过程
启动二进制日志
为当前节点设置全局唯一的ID号
1 | 在my.cnf里面添加以下内容 |
创建有复制权限的用户账号
1 | mysql> grant replication slave,replication client on *.* to 'repuser'@'%' identified by 'password'; |
4.1.2、从节点配置过程
启动中继日志
为当前节点设置全局唯一的ID号
设置为只读状态(不影响主从复制)
1 | 在my.cnf里面添加以下内容 |
使用有复制权限的用户账号连接到主服务器,并启动复制线程
1 | mysql> change master to master_host='master-node',master_user='repuser',master_password='password',master_port=3306,master_log_file='mater-log.003',master_log_pos=1111,master_connect_retry=10; |
查看从状态信息
1 | mysql> show slave status\G; |
4.1.3、复制架构中应该注意的问题
限制从服务器只读
1 | 确保my.cnf配置以下选项 |
保证主从复制事务安全
主节点配置
1 | [mysqld] |
从节点
1 | [mysqld] |
4.2、主主复制
4.2.1、注意事项
互为主从
容易数据不一致,慎用
自动增长ID
A节点使用奇数ID
1 | [mysqld] |
B节点使用偶数ID
1 | [mysqld] |
4.2.2、配置步骤
使用唯一的server_id
启动bin_log和relay_log
创建拥有复制权限的用户
定义自动增长ID字段数值范围为奇偶
均把对方指定为主节点,启动复制线程
4.3、半同步复制
跟主从复制类似
主节点会等待一个从节点写入完成再返回客户端写入成功
通过semisync插件提供半同步复制功能
1 | 二进制安装包 |
4.3.1、主节点
启动二进制日志
为当前节点设置全局唯一的ID号
1 | 在my.cnf里面添加以下内容 |
创建有复制权限的用户账号
1 | mysql> grant replication slave,replication client on *.* to 'repuser'@'%' identified by 'password'; |
4.3.2、从节点配置过程
启动中继日志
为当前节点设置全局唯一的ID号
设置为只读状态(不影响主从复制)
1 | 在my.cnf里面添加以下内容 |
使用有复制权限的用户账号连接到主服务器,并启动复制线程
1 | mysql> change master to master_host='master-node',master_user='repuser',master_password='password',master_port=3306,master_log_file='mater-log.003',master_log_pos=1111,master_connect_retry=10; |
查看从状态信息
1 | mysql> show slave status\G; |
4.3.3、启动semicsync插件
主节点
1 | # 安装半同步复制master插件 |
从节点
1 | # 停止从节点复制线程 |
5、复制过滤
5.1、主服务器
1 | [mysqld] |
5.2、从服务器
1 | [mysqld] |
6、监控维护
6.1、相关文件
6.1.1、master.info
保存Slave连接至master时的相关信息,例如账号密码、服务器地址、Position等
6.1.2、relay-log.info
保存当前Slave节点已经复制的当前二进制日志与本地relay-log日志的对应项
6.2、清理日志
6.3、复制监控
1 | mysql> show master status; |
6.4、从服务器是否落后于主服务器
1 | mysql> show slave status \G; |
6.5、确定主从数据是否一致
1 | 安装依赖包 |
6.6、数据不一致如何处理
重新同步
七、MHA(Master High Availability)
1、介绍
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Mananger可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点中,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他slave重新指向新的master。整个故障转移过程对应用程序完全透明。
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失,但这这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。
2、MHA组件
Manager节点
- masterha_check_ssh:MHA依赖的SSH环境检测工具
- masterha_check_repl:MySQL复制环境检测工具
- masterha_manager:MHA服务主程序
- masterha_check_status:MHA运行状态探测工具
- masterha_master_monitor:MySQL master节点监测工具
- masterha_master_switch:master节点切换工具
- masterha_conf_host:添加删除配置的节点
- masterha_stop:关闭MHA服务
Node节点
- save_binary_logs:保存复制master的binlog
- apply_diff_relay_logs:识别差异的中继日志事件并应用到其他slave
- filter_mysqlbinlog:去除不必要的rollback事件(已弃用)
- purge_relay_logs:清除中继日志(不阻塞SQL线程)
自定义扩展
- secondary_check_script:通过多条网络路由检查master可用性
- master_ip_failover_script:更新Application使用的master IP地址
- shutdown_script:关闭master节点
- report_script:发送报告
- init_conf_load_script:加载初始化配置参数
- master_ip_online_chage_script:更新master节点IP地址
3、准备MHA环境
3.1、MHA对MySQL复制环境有特殊要求
- 各节点开启二进制日志和中继日志
- 从节点需要配置read-only,关闭relay_log_purge
3.2、服务器角色分配
- manager:MHA Manager
- db1:master节点
- db2:slave节点
- db3:slave节点
3.3、环境准备
各节点启用epel源
各节点/etc/hosts文件
1 | vi /etc/hosts |
初始master节点配置
1 | [mysqld] |
初始Slave节点配置
1 | [mysqld] |
配置主从复制
db1配置为master节点
db2、db3以db1为master节点,开启slave线程
所有数据库节点创建MHA所需的管理用户
1 | mysql> grant all privileges on *.* to 'mhauser'@'%' identified by 'password'; |
配置manager、db1、db2、db3免密码SSH连接
1 | 在manager节点上配置证书,分发到其他节点 |
3.4、安装MHA
3.4.1、node节点安装
1 | 安装依赖包 |
3.4.2、manager节点安装配置
1 | 安装perl相关软件包 |
3.4.3、manager节点检测配置和启动
1 | 检查各节点ssh互信通信配置 |
3.4.4、MHA注意点
- keepalived提供VIP和master切换的对应脚本
- masterha_manager启动参数
- –remove_dead_master_conf,当发生主从切换后,老的主库的IP将会从配置文件中移除
- –ignore_last_failover,MHA切换时会产生app1.failover.complete文件,两次切换时间少于8小时会切换失败,使用该参数能忽略
八、复制的问题和解决
1、数据损坏和丢失
- Master
- MHA + 半同步复制
- Slave
- 重新复制
2、混合使用存储引擎
- MyISAM不支持事务
- InnoDB支持事务
3、server_id不唯一
- 重新复制
4、复制延迟
- 需要额外的监控工具辅助
九、Percona XtraDB Cluster
1、介绍
项目地址: http://www.percona.com/doc/percona-xtradb-cluster/intro.html
Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案.
Percona XtraDB Cluster提供的特性有:
同步复制,事务要么在所有节点提交或不提交。
多主复制,可以在任意节点进行写操作。
在从服务器上并行应用事件,真正意义上的并行复制。
节点自动配置。
数据一致性,不再是异步复制。
Percona XtraDB Cluster完全兼容MySQL和Percona Server,表现在:
数据的兼容性
应用程序的兼容性:无需更改应用程序
2、特点
- 当执行一个查询时,在本地节点上执行。因为所有数据都在本地,无需远程访问。
- 无需集中管理。可以在任何时间点失去任何节点,但是集群将照常工作。
- 良好的读负载扩展,任意节点都可以查询。
- 加入新节点,开销大。需要复制完整的数据。
- 不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。
- 有多少个节点就有多少重复的数据。
3、局限性
- 目前的复制仅仅支持InnoDB存储引擎。任何写入其他引擎的表,包括mysql.*表将不会复制。但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的。
- DELETE操作不支持没有主键的表。没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集。
- 在多主环境下LOCK/UNLOCK TABLES不支持。以及锁函数GET_LOCK(), RELEASE_LOCK()..
- 查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
- 允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
- 由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
- XA事务不支持,由于在提交上可能回滚。
- 整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
- 集群节点建议最少3个。2个也可以运行,但是官方不推荐这么做,因为3个节点是为了预防脑裂。
- 如果DDL语句有问题将破坏集群。建议使用pt-online-schema-change操作DDL。
4、安装galera-cluster
4.1、软件包
4.2、准备工作
1 | # cat /etc/hosts |
节点一
1 | [root@db1 ~]# mkdir -p /usr/local/pxc |
节点二、节点三修改my.cnf里面的对应值就行
wsrep_node_address =
server-id =
4.3、启动集群
先初始化节点一,将节点一加入集群
1 | 启动集群 |
1 | # 创建账号 |
节点二、节点三加入集群
1 | mysqld --defaults-file=/etc/my.cnf & |