centos7_离线安装_MariaDB_MySQL_多主架构 Galera Cluster

centos7_离线安装_MariaDB_MySQL_多主架构 Galera Cluster

部署前准备:

1、3台没有外网权限、操作系统为centos7及以上版本的服务器;

主机名ip
mysql0110.218.137.48
mysql0210.218.137.49
mysql0310.218.137.50

2、1台具有外网权限的电脑或服务器,用来下载rpm包(本文采用的是服务器);

步骤:

1、登录mysql01至mysql03 关闭防火墙(3台全部执行)

 iptables -F
 service iptables save
 systemctl stop iptables
 systemctl stop firewalld
 systemctl disable iptables
 systemctl disable firewalld

2、创建必须要的目录(3台全部执行)

mkdir -p /data/mysql/mysql-logs/mysql-bin /data/mysql/{mydata,mariadb,make,errorlog} /data/mysql/tmpdir/{tmpdir,slave_tmpdir}

3、准备一台测试服务器并下载 mysql-wsrep、galera包到指定目录(测试服务器执行)

#服务器端下载 已mysql-wsrep开头的包,官网依赖包下载地址
http://releases.galeracluster.com/mysql-wsrep-5.7/centos/7/x86_64/
#包名
mysql-wsrep-5.7-5.7.31-25.23.el7.x86_64.rpm
mysql-wsrep-client-5.7-5.7.31-25.23.el7.x86_64.rpm
mysql-wsrep-common-5.7-5.7.31-25.23.el7.x86_64.rpm
mysql-wsrep-devel-5.7-5.7.31-25.23.el7.x86_64.rpm
mysql-wsrep-libs-5.7-5.7.31-25.23.el7.x86_64.rpm
mysql-wsrep-libs-compat-5.7-5.7.31-25.23.el7.x86_64.rpm
mysql-wsrep-server-5.7-5.7.31-25.23.el7.x86_64.rpm
mysql-wsrep-test-5.7-5.7.31-25.23.el7.x86_64.rpm
#服务器端下载galera
wget http://releases.galeracluster.com/galera-3/centos/7/x86_64/galera-3-25.3.31-1.el7.x86_64.rpm

这里是直接在服务器上操作的,也可以直接下载到自己电脑本地然后在上传至指定安装Galera Cluster集群的服务器。

4、下载的包上到mysql01至mysql03服务器(测试服务器执行)

scp mysql-wsrep* root@10.218.137.48:/data/mysql/make/
scp mysql-wsrep* root@10.218.137.49:/data/mysql/make/
scp mysql-wsrep* root@10.218.137.50:/data/mysql/make/
scp galera-3-25.3.31-1.el7.x86_64.rpm root@10.218.137.48:/data/mysql/make/
scp galera-3-25.3.31-1.el7.x86_64.rpm root@10.218.137.49:/data/mysql/make/
scp galera-3-25.3.31-1.el7.x86_64.rpm root@10.218.137.50:/data/mysql/make/

5、下载依赖包,这里yum安装(3台全部执行)

安装包已准备完毕,下载依赖包;Redhat7 yum源已提前在内网部署好。

yum -y install gcc gcc-c++  cmake ncurses-devel bison libxml2-devel openssl-devel libevent-devel rsync

6、 安装mysql-wsrep、galera包(3台全部执行)

cd /data/mysql/make/ && yum install *.rpm -y

7、 修改配置文件vim /etc/my.cnf(3台全部执行,注意修改server-id

可以以下文为准直接覆盖,再次声明 注意修改server-id

[server]

[mysqld]
#此参数建议为当台服务器ip的最后一段
server-id=48
character-set-server=utf8
#此参数为galera的绝对路径,验证下是否正确
wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so
#此参数为部署Galera Cluster集群的服务器地址
wsrep_cluster_address="gcomm://10.218.137.48,10.218.137.49,10.218.137.50"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_cluster_name='mycluster'
wsrep_sst_method=rsync
wsrep_max_ws_rows=131072000000
wsrep_max_ws_size=1073741824
port=38383
log-bin-trust-function-creators=1
error-log = /data/mysql/errorlog/mysql.log
bulk_insert_buffer_size = 100M
#此参数用于缓存索引和数据的内存大小,根据自身情况而定,我的服务器是32G的内存
innodb_buffer_pool_size = 22G
innodb_log_file_size = 512M 
max_connections = 1000
innodb_file_per_table = ON
innodb_flush_log_at_trx_commit = 0
skip_name_resolve

innodb_rollback_on_timeout = on
max_allowed_packet = 500M



innodb_flush_method = O_DIRECT
innodb_autoextend_increment = 128
query_cache_type = 0
query_cache_size = 1024M
binlog_cache_size = 4M
key_buffer_size = 16M


slow_query_log = ON
long_query_time = 3

log-bin=/data/mysql/mysql-logs/mysql-bin
slow_query_log_file = /data/mysql/mydata/slow.log
datadir=/data/mysql/mariadb
wait_timeout=300

tmpdir=/data/mysql/tmpdir/tmpdir
slave_load_tmpdir=/data/mysql/tmpdir/slave_tmpdir
max_tmp_tables=128
tmp_table_size=33554432
max_heap_table_size=33554432
group_concat_max_len = 100000000

#此参数为免密登录数据库,需要密码登录注释掉即可。(修改配置文件记得重启)
skip-grant-tables

#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#bind-address=0.0.0.0
#
# Optional setting
wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0

# this is only for embedded server
[embedded]

# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]

# This group is only read by MariaDB-10.0 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.0]

8、 确认下 libgalera_smm.so 文件路径是否与my.cnf里的一致

find / -name "libgalera_smm.so"

9、初始化数据库(3台全部执行)

mysqld --initialize --user=mysql --datadir=/data/mysql/mariadb/

初始化结束时会打印默认密码,由于在配置文件my.cnf里把skip-grant-tables参数打开了这个参数是免密登录数据库,所以不需要记录密码。若是没有打开,注意记录下密码。

10、 启动数据库

#启动第一台(前台启动)
mysqld --wsrep-new-cluster --user=mysql
#启动第二台(前台启动)
mysqld --user=mysql
#启动第三台(前台启动)
mysqld --user=mysql

启动时一定注意
因为是新部署可以直接kill -9杀死进程。
关闭时一定要注意顺序,关闭的最后一台一定是您第一台启动的(非正常关闭,启动第一台时一定要把/data/mysql/mariadb/grastate.dat中的safe_to_bootstrap值改成1在启动)。其他两台没有先后。

11、验证

mysql -uroot -p

因skip-grant-tables打开,视为免密登录,当命令行提示“Enter password:”时按跳过即可。

SHOW STATUS LIKE 'wsrep_%';

如 wsrep_incoming_addresses 的值与 /etc/my.cnf 配置的 IP 和 Port 相符,则说明搭建成功。

12、root 改密&创建数据库、指定字符集&授权&验证

use mysql;
#root 改密
update user set authentication_string = password ( '$password' ),password_expired='N',account_locked='N' where user = 'root' ;
#创建数据库、指定字符集
create database $DBname character set 'utf8';
#授权(/etc/my.cnf中skip-grant-tables需要注释掉才可给用户授权成功)
grant all on $DBname.* to 'user_name'@'%' identified by '$password';
flush privileges;
#验证
select * from mysql.user where user='USER'\G;

MySQLDump

默认不带参数的导出,生成的文件中 SQL 语句的顺序是:创建数据库判断语句-删除表-创建表-锁表-禁用索引-插入数据-启用索引-解锁表

linux mysqldump

MySQL mysqldump数据导出详解

常用参数

选项说明
-u登入 MySQLDB 用户的名称。
-p登入 MySQLDB 用户的密码。
–databases, -B数据库名称,参数后所有内容均视为数据库名。可省略。
–single-transaction**仅适用于 InnoDB。**该选项在导出数据前提交一个 BEGIN SQL 语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。与 --lock-tables 选项互斥,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用–quick 选项。
–all-databases, -A指代所有数据库。
–ignore-table不导出指定表。如需忽略多个表,要多次指定,每次一个表名。例:–ignore-table=database.table1 --ignore-table=database.table2
–all-tablespaces, -Y导出全部表空间。
–no-tablespaces, -y不导出表空间数据。
–skip-add-locks生成的文件中,在 Insert 语句前后去掉锁表语句
–skip-comments不输出注释信息。作用与 --comments 相反,–comments 默认启用。
–no-data, -d只导出表结构。
–add-drop-database在建库语句前添加清空数据库语句。
–skip-add-drop-table不在建表语句前添加清空表的语句。作用与 --add-drop-table 相反,–add-drop-table 默认启用。
–complete-insert, -c使用完整的 INSERT 语句(包含列名),有可能受到 max_allowed_packet 参数影响导致插入失败。
–no-create-db, -n不输出 CREATE DATABASE 语句。
–no-create-info, -t不输出 CREATE TABLE 语句。
–default-character-set设置默认字符集,默认值为 UTF8。
–extended-insert, -e使用具有多个 VALUES 列的 INSERT 语法,使导出文件更小,并加速导入时的速度。默认为打开状态,使用 --skip-extended-insert 取消选项。
–insert-ignore使用 INSERT IGNORE 取代 INSERT INTO 语句。INSERT IGNORE 作用:如表中已存在相同的记录,则忽略当前要插入的记录。
–replace使用 REPLACE INTO 取代 INSERT INTO 语句。REPLACE INTO 表示插入替换数据,需求表中有 PrimaryKey / unique 索引。目标数据如果已存在于数据库中,则用新数据替换,如果不存在效果则与 INSERT INTO 一样。REPLACE 语句会返回一个值来指示受影响的行的数目,该数是被删除和

被插入的行数的和。REPLACE 单行,该值为1,则一行被插入,同时没有行被删除;如果该值大于 1,则在新行被插入前,有一行或多行被删除;如果表包含多个唯一索引,且新行复制了在不同唯一索引中的不同旧行的值,则有可能是单行替换了多个旧行。
–opt | 等同于 --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys,默认开启,可用 --skip-opt 禁用。
–routines, -R | 导出存储过程和自定义函数。
–net-buffer-length | 通信时缓存数据的大小(即每个 insert 语句的大小),配合 --extended-insert 使用(默认开启)。最小4k,最大16M,默认是 1046528(1M)。

库级命令示例

  • 导出某库所有表结构及数据

    替换 USER、PSWD、DATABASE、EXPORT_FILE_NAME

    mysqldump -uUSER -pPSWD DATABASE --single-transaction > EXPORT_FILE_NAME
    
  • 导出某库所有表结构

    替换 USER、PSWD、DATABASE、EXPORT_FILE_NAME

    mysqldump -uUSER -pPSWD DATABASE -d > EXPORT_FILE_NAME
    
  • 导出某库所有数据

    替换 USER、PSWD、DATABASE、EXPORT_FILE_NAME

    mysqldump -uUSER -pPSWD DATABASE -n -t --skip-comments > EXPORT_FILE_NAME
    

表级命令示例

  • 导出某表的表结构及数据

    替换 USER、PSWD、DATABASE、TABLE、CONDITION、EXPORT_FILE_NAME

    mysqldump -uUSER -pPSWD DATABASE TABLE --single-transaction --where "CONDITION"> EXPORT_FILE_NAME
    
  • 导出某表的表结构

    替换 USER、PSWD、DATABASE、TABLE、EXPORT_FILE_NAME

    mysqldump -uUSER -pPSWD DATABASE TABLE -d > EXPORT_FILE_NAME
    
  • 导出某表的数据

    替换 USER、PSWD、DATABASE、TABLE、EXPORT_FILE_NAME

    mysqldump -uUSER -pPSWD DATABASE TABLE -t --single-transaction --skip-add-locks > EXPORT_FILE_NAME
    
  • 导出某表的数据(insert into 语句中含列名)

    替换 USER、PSWD、DATABASE、TABLE、EXPORT_FILE_NAME

    mysqldump -uUSER -pPSWD DATABASE TABLE -cnt --single-transaction --skip-add-locks > EXPORT_FILE_NAME
    
  • 将某表指定列导出生成 INSERT 语句

    1. create table 临时表名 as select 某表指定列 from 某表;

    2. mysqldump -uUSER -pPSWD DATABASE 临时表名 -c > EXPORT_FILE_NAME

修改全局变量

  • 修改允许写入事务的最大行数

    SET GLOBAL wsrep_max_ws_rows = 400000;
    

相关文档

MySQL 8.0 主从复制及 MySQL-Router 读写分离

快速删除大表

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值