扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇内容介绍了“MySQL高可用Percona-XtraDB-Cluster环境的搭建”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
成都网站建设哪家好,找成都创新互联!专注于网页设计、重庆网站建设公司、微信开发、小程序设计、集团成都企业网站定制等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:报废汽车回收等众多领域,积累了大量丰富的经验,同时也获得了客户的一致称誉!
数据库架构:三个节点PXC
node1:192.168.8.51
node2:192.168.8.52
node3:192.168.8.53
keepalived工具包
percona-xtrabackup-2.4.11-Linux-x86_64.libgcrypt145.tar.gz
Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101.tar.gz
一、关闭防火墙
systemctl stop firewalld systemctl disable firewalld
二、配置hosts
192.168.8.51 node1 192.168.8.52 node2 192.168.8.53 node3
三、安装依赖
yum remove mariadb-libs -y yum install -y gcc yum install -y gcc-c++ yum install -y ncurses-devel.x86_64 yum install -y cmake.x86_64 yum install -y libaio.x86_64 yum install -y libaio-devel yum install -y bison.x86_64 yum install -y gcc-c++.x86_64 yum install -y bind-utils yum install -y wget yum install -y curl yum install -y curl-devel yum install -y perl yum install -y openssh-clients yum install -y setuptool yum install -y sysstat yum install -y make yum install -y libev yum install -y redhat-lsb* yum install -y lrzsz.x86_64 -y yum install -y perl-DBD-MySQL yum install -y perl-IO-Socket-SSL.noarch yum install -y git yum install -y scons yum install -y socat yum install -y check yum install -y boost-devel
四、删除安装包产生的mysql配置文件
rm -rf /etc/my.cnf*
五、添加mysql用户和组
groupadd -g 300 mysql useradd -u 300 -g mysql mysql
六、安装PXC和xtrabackup
1、解压工具包
cd /mysql/app tar zxvf /software/percona-xtrabackup-2.4.11-Linux-x86_64.libgcrypt145.tar.gz mv percona-xtrabackup-2.4.11-Linux-x86_64 xtrabackup cd /mysql/app tar zxvf /software/Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101. tar.gz mv Percona-XtraDB-Cluster-5.7.21-rel20-29.26.1.Linux.x86_64.ssl101 mysql cp /mysql/app/xtrabackup/bin/* /usr/sbin/
2、修改环境变量
vi ~/.bash_profile
PATH=\$PATH:/mysql/app/mysql/bin:/mysql/app/xtrabackup/bin:$HOME/bin:/usr/bin:/sbin:/bin
vi /etc/profile
PATH=\$PATH:/mysql/app/mysql/bin:/mysql/app/xtrabackup/bin:$HOME/bin:/usr/bin:/sbin:/bin
source /etc/profile source ~/.bash_profile xtrabackup --version mysql --version
3、创建相关目录
mkdir -p /mysql/data/3306/data mkdir -p /mysql/log/3306/binlog mkdir -p /mysql/log/3306/relaylog mkdir -p /mysql/backup/backup-db mkdir -p /mysql/backup/backup-tmp mkdir -p /mysql/backup/backup-binlog chown -R mysql:mysql /mysql/*
4、修改mysql.server
rm -rf /etc/my.cnf* mv /mysql/app/mysql/support-files/mysql.server mysql.server.bak cp /software/mysql.server.pxc /mysql/app/mysql/support-files/mysql.server chown mysql:mysql /mysql/app/mysql/support-files/mysql.server chmod +x /mysql/app/mysql/support-files/mysql.server cp /mysql/app/mysql/support-files/mysql.server /mysql/app/mysql/bin/mysqlpxc mysqlpxc status
5、配置my.cnf
192.168.8.51
vi /mysql/data/3306/my.cnf
[client] port=3306 socket = /mysql/data/3306/mysql.sock [mysql] no-beep prompt="\u@itpux \R:\m:\s [\d]> " #no-auto-rehash auto-rehash default-character-set=utf8 [mysqld] ########basic settings######## server-id=513306 port=3306 user = mysql bind_address= 0.0.0.0 basedir=/mysql/app/mysql datadir=/mysql/data/3306/data socket = /mysql/data/3306/mysql.sock pid-file=/mysql/data/3306/mysql.pid character-set-server=utf8 skip-character-set-client-handshake=1 autocommit = 0 #skip_name_resolve = 1 max_connections = 800 max_connect_errors = 1000 default-storage-engine=INNODB transaction_isolation = READ-COMMITTED explicit_defaults_for_timestamp = 1 sort_buffer_size = 32M join_buffer_size = 128M tmp_table_size = 72M max_allowed_packet = 16M sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" interactive_timeout = 1800 wait_timeout = 1800 read_buffer_size = 16M read_rnd_buffer_size = 32M #event_scheduler =1 query_cache_type = 1 query_cache_size=1M table_open_cache=2000 thread_cache_size=768 myisam_max_sort_file_size=10G myisam_sort_buffer_size=135M key_buffer_size=32M read_buffer_size=8M read_rnd_buffer_size=4M back_log=1024 #flush_time=0 open_files_limit=65536 table_definition_cache=1400 #binlog_row_event_max_size=8K #sync_master_info=10000 #sync_relay_log=10000 #sync_relay_log_info=10000 ########log settings######## log-output=FILE general_log = 0 general_log_file=/mysql/log/3306/general.log slow_query_log = ON slow_query_log_file=/mysql/log/3306/slow-query.log long_query_time=10 log-error=/mysql/log/3306/mysql-error.log log_queries_not_using_indexes = 1 log_slow_admin_statements = 1 log_slow_slave_statements = 1 log_throttle_queries_not_using_indexes = 10 expire_logs_days = 90 min_examined_row_limit = 100 log_bin=/mysql/log/3306/binlog/mysql-binlog log_bin_index=/mysql/log/3306/binlog/mysql-binlog.index binlog_format=ROW #pxc parameter log-slave-updates = 1 innodb_locks_unsafe_for_binlog = 1 innodb_autoinc_lock_mode = 2 wsrep_cluster_name=steven_mysql wsrep_slave_threads=2 wsrep_provider=/mysql/app/mysql/lib/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.8.51,192.168.8.52,192.168.8.53 wsrep_node_address=192.168.8.51 wsrep_node_name=node1 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth="sstuser:sstuser123" pxc_strict_mode=ENFORCING
192.168.8.52
vi /mysql/data/3306/my.cnf
[client] port=3306 socket = /mysql/data/3306/mysql.sock [mysql] no-beep prompt="\u@itpux \R:\m:\s [\d]> " #no-auto-rehash auto-rehash default-character-set=utf8 [mysqld] ########basic settings######## server-id=523306 port=3306 user = mysql bind_address= 0.0.0.0 basedir=/mysql/app/mysql datadir=/mysql/data/3306/data socket = /mysql/data/3306/mysql.sock pid-file=/mysql/data/3306/mysql.pid character-set-server=utf8 skip-character-set-client-handshake=1 autocommit = 0 #skip_name_resolve = 1 max_connections = 800 max_connect_errors = 1000 default-storage-engine=INNODB transaction_isolation = READ-COMMITTED explicit_defaults_for_timestamp = 1 sort_buffer_size = 32M join_buffer_size = 128M tmp_table_size = 72M max_allowed_packet = 16M sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" interactive_timeout = 1800 wait_timeout = 1800 read_buffer_size = 16M read_rnd_buffer_size = 32M #event_scheduler =1 query_cache_type = 1 query_cache_size=1M table_open_cache=2000 thread_cache_size=768 myisam_max_sort_file_size=10G myisam_sort_buffer_size=135M key_buffer_size=32M read_buffer_size=8M read_rnd_buffer_size=4M back_log=1024 #flush_time=0 open_files_limit=65536 table_definition_cache=1400 #binlog_row_event_max_size=8K #sync_master_info=10000 #sync_relay_log=10000 #sync_relay_log_info=10000 ########log settings######## log-output=FILE general_log = 0 general_log_file=/mysql/log/3306/general.log slow_query_log = ON slow_query_log_file=/mysql/log/3306/slow-query.log long_query_time=10 log-error=/mysql/log/3306/mysql-error.log log_queries_not_using_indexes = 1 log_slow_admin_statements = 1 log_slow_slave_statements = 1 log_throttle_queries_not_using_indexes = 10 expire_logs_days = 90 min_examined_row_limit = 100 log_bin=/mysql/log/3306/binlog/mysql-binlog log_bin_index=/mysql/log/3306/binlog/mysql-binlog.index binlog_format=ROW #pxc parameter log-slave-updates = 1 innodb_locks_unsafe_for_binlog = 1 innodb_autoinc_lock_mode = 2 wsrep_cluster_name=steven_mysql wsrep_slave_threads=2 wsrep_provider=/mysql/app/mysql/lib/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.8.51,192.168.8.52,192.168.8.53 wsrep_node_address=192.168.8.52 wsrep_node_name=node2 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth="sstuser:sstuser123" pxc_strict_mode=ENFORCING
192.168.8.53
vi /mysql/data/3306/my.cnf
[client] port=3306 socket = /mysql/data/3306/mysql.sock [mysql] no-beep prompt="\u@itpux \R:\m:\s [\d]> " #no-auto-rehash auto-rehash default-character-set=utf8 [mysqld] ########basic settings######## server-id=533306 port=3306 user = mysql bind_address= 0.0.0.0 basedir=/mysql/app/mysql datadir=/mysql/data/3306/data socket = /mysql/data/3306/mysql.sock pid-file=/mysql/data/3306/mysql.pid character-set-server=utf8 skip-character-set-client-handshake=1 autocommit = 0 #skip_name_resolve = 1 max_connections = 800 max_connect_errors = 1000 default-storage-engine=INNODB transaction_isolation = READ-COMMITTED explicit_defaults_for_timestamp = 1 sort_buffer_size = 32M join_buffer_size = 128M tmp_table_size = 72M max_allowed_packet = 16M sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" interactive_timeout = 1800 wait_timeout = 1800 read_buffer_size = 16M read_rnd_buffer_size = 32M #event_scheduler =1 query_cache_type = 1 query_cache_size=1M table_open_cache=2000 thread_cache_size=768 myisam_max_sort_file_size=10G myisam_sort_buffer_size=135M key_buffer_size=32M read_buffer_size=8M read_rnd_buffer_size=4M back_log=1024 #flush_time=0 open_files_limit=65536 table_definition_cache=1400 #binlog_row_event_max_size=8K #sync_master_info=10000 #sync_relay_log=10000 #sync_relay_log_info=10000 ########log settings######## log-output=FILE general_log = 0 general_log_file=/mysql/log/3306/general.log slow_query_log = ON slow_query_log_file=/mysql/log/3306/slow-query.log long_query_time=10 log-error=/mysql/log/3306/mysql-error.log log_queries_not_using_indexes = 1 log_slow_admin_statements = 1 log_slow_slave_statements = 1 log_throttle_queries_not_using_indexes = 10 expire_logs_days = 90 min_examined_row_limit = 100 log_bin=/mysql/log/3306/binlog/mysql-binlog log_bin_index=/mysql/log/3306/binlog/mysql-binlog.index binlog_format=ROW #pxc parameter log-slave-updates = 1 innodb_locks_unsafe_for_binlog = 1 innodb_autoinc_lock_mode = 2 wsrep_cluster_name=steven_mysql wsrep_slave_threads=2 wsrep_provider=/mysql/app/mysql/lib/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.8.51,192.168.8.52,192.168.8.53 wsrep_node_address=192.168.8.53 wsrep_node_name=node3 wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth="sstuser:sstuser123" pxc_strict_mode=ENFORCING
6、初始化node1
/mysql/app/mysql/bin/mysqld --defaults-file=/mysql/data/3306/my.cnf --initialize --user=mysql --basedir=/mysql/app/mysql --datadir=/mysql/data/3306/data
ln -sf /mysql/data/3306/mysql.sock /tmp/mysql.sock
mysqlpxc bootstrap-pxc
7、根据初始化密码登录mysql并修改root密码
[root@node1 tmp]# mysql -uroot -pmysql mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) [root@node1 tmp]# mysql -uroot --password='h0.=+GPpmysql> alter user 'root'@'localhost' identified by 'mysql'; Query OK, 0 rows affected (0.37 sec) mysql> flush privileges; Query OK, 0 rows affected (0.02 sec) mysql> quit Bye [root@node1 tmp]# mysql -uroot -pmysql mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.7.21-20-29.26-log Percona XtraDB Cluster binary (GPL) 5.7.21-29.26, Revision 1702aea, wsrep_29.26 Copyright (c) 2009-2018 Percona LLC and/or its affiliates Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create user 'root'@'%' identified by 'mysql'; Query OK, 0 rows affected (0.02 sec) mysql> grant all privileges on *.* to 'root'@'%' identified by 'mysql' with grant option; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.30 sec) mysql> select user,host from mysql.user; +---------------+-----------+ | user | host | +---------------+-----------+ | root | % | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 4 rows in set (0.00 sec)
8、创建复制用户
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'sstuser123'; Query OK, 0 rows affected (0.01 sec) mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; Query OK, 0 rows affected (0.30 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.04 sec) mysql> show status like '%wsrep%'; +----------------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------------+--------------------------------------+ | wsrep_local_state_uuid | c3d76c5e-e407-11e8-a2b4-36c797a7eab7 | | wsrep_protocol_version | 8 | | wsrep_last_applied | 8 | | wsrep_last_committed | 8 | | wsrep_replicated | 8 | | wsrep_replicated_bytes | 1864 | | wsrep_repl_keys | 8 | | wsrep_repl_keys_bytes | 256 | | wsrep_repl_data_bytes | 1066 | | wsrep_repl_other_bytes | 0 | | wsrep_received | 2 | | wsrep_received_bytes | 141 | | wsrep_local_commits | 0 | | wsrep_local_cert_failures | 0 | | wsrep_local_replays | 0 | | wsrep_local_send_queue | 0 | | wsrep_local_send_queue_max | 1 | | wsrep_local_send_queue_min | 0 | | wsrep_local_send_queue_avg | 0.000000 | | wsrep_local_recv_queue | 0 | | wsrep_local_recv_queue_max | 2 | | wsrep_local_recv_queue_min | 0 | | wsrep_local_recv_queue_avg | 0.500000 | | wsrep_local_cached_downto | 1 | | wsrep_flow_control_paused_ns | 0 | | wsrep_flow_control_paused | 0.000000 | | wsrep_flow_control_sent | 0 | | wsrep_flow_control_recv | 0 | | wsrep_flow_control_interval | [ 100, 100 ] | | wsrep_flow_control_interval_low | 100 | | wsrep_flow_control_interval_high | 100 | | wsrep_flow_control_status | OFF | | wsrep_cert_deps_distance | 1.000000 | | wsrep_apply_oooe | 0.000000 | | wsrep_apply_oool | 0.000000 | | wsrep_apply_window | 1.000000 | | wsrep_commit_oooe | 0.000000 | | wsrep_commit_oool | 0.000000 | | wsrep_commit_window | 1.000000 | | wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | wsrep_cert_index_size | 1 | | wsrep_cert_bucket_count | 22 | | wsrep_gcache_pool_size | 3504 | | wsrep_causal_reads | 0 | | wsrep_cert_interval | 0.000000 | | wsrep_ist_receive_status | | | wsrep_ist_receive_seqno_start | 0 | | wsrep_ist_receive_seqno_current | 0 | | wsrep_ist_receive_seqno_end | 0 | | wsrep_incoming_addresses | 192.168.8.51:3306 | | wsrep_desync_count | 0 | | wsrep_evs_delayed | | | wsrep_evs_evict_list | | | wsrep_evs_repl_latency | 0/0/0/0/0 | | wsrep_evs_state | OPERATIONAL | | wsrep_gcomm_uuid | c3d4e212-e407-11e8-a5ad-cf65e64856f5 | | wsrep_cluster_conf_id | 1 | | wsrep_cluster_size | 1 | | wsrep_cluster_state_uuid | c3d76c5e-e407-11e8-a2b4-36c797a7eab7 | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | wsrep_local_bf_aborts | 0 | | wsrep_local_index | 0 | | wsrep_provider_name | Galera | | wsrep_provider_vendor | Codership Oy| | wsrep_provider_version | 3.26(r) | | wsrep_ready | ON | +----------------------------------+--------------------------------------+
9、将node2加入到集群
rm -rf /mysql/data/3306/data/* ln -sf /mysql/data/3306/mysql.sock /tmp/mysql.sock
mysqlpxc start MySQL (Percona XtraDB Cluster) is not running, but lock file (/var/lock/subsys/mysql) exists[FAILED] Initializing MySQL database: [ OK ] Starting MySQL (Percona XtraDB Cluster)......State transfer in progress, setting sleep higher .....[ OK ]
ln -sf /mysql/data/3306/mysql.sock /tmp/mysql.sock tail -100f /mysql/log/3306/mysql-error.log
10、将node2加入到集群
rm -rf /mysql/data/3306/data/* ln -sf /mysql/data/3306/mysql.sock /tmp/mysql.sock
mysqlpxc start MySQL (Percona XtraDB Cluster) is not running, but lock file (/var/lock/subsys/mysql) exists[FAILED] Initializing MySQL database: [ OK ] Starting MySQL (Percona XtraDB Cluster)......State transfer in progress, setting sleep higher .....[ OK ]
ln -sf /mysql/data/3306/mysql.sock /tmp/mysql.sock tail -100f /mysql/log/3306/mysql-error.log
七、数据验证
在三个节点查看数据库如下:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)
测试一
在node1创建数据库test
mysql> create database test DEFAULT CHARSET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.03 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set (0.01 sec)
在node2和node3进行查看
mysql> create database test DEFAULT CHARSET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.03 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set (0.01 sec)
测试二
在node2创建测试表
mysql> use test; Database changed mysql> create table t1(id int(6)); Query OK, 0 rows affected (0.52 sec) mysql> create table t2(id int(6)); Query OK, 0 rows affected (0.13 sec) mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | t1 | | t2 | +----------------+ 2 rows in set (0.00 sec)
在node1和node2进程查看
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | t1 | | t2 | +----------------+
测试三
在node3删除t2
mysql> use test; Database changed mysql> drop table t2; Query OK, 0 rows affected (0.10 sec) mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | t1 | +----------------+
在node1和node2查看
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | t1 | +----------------+
到此,PXC搭建完成,三个节点均可进行读写操作。
“MySQL高可用Percona-XtraDB-Cluster环境的搭建”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流