一、下载mysql
下载依赖性
yum install ncurses-devel.x86_64 -y
yum install -y bison
yum install -y gcc-c++
cmake编译mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0/ 源码编译
make
make install
vim /etc/my.cnf
mysqld --initialize --user=mysql
/etc/init.d/mysqld start
mysql_secure_installation
二、 mysql图形化管理
unzip phpMyAdmin-5.0.2-all-languages.zip
mv phpMyAdmin-5.0.2-all-languages /usr/local/nginx/html/phpadmin
systemctl enable --now php-fpm.service
vim /usr/local/nginx/conf/nginx.conf
vim /usr/local/lnmp/php/etc/php.ini PHP中设置默认MySQL套接字与mysql一致
三、主从复制
MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
在server1主机master主库
中将mysql
的数据目录
以及配置文件
复制到server2主机,即slave从库
scp -r /usr/local/mysql/ server2:/usr/local/
scp /etc/my.cnf server2:/etc/
master主库
vim /etc/my.cnf
/etc/init.d/mysqld restart
进入数据库,添加授权用户,并且进行授权。slave
端可以通过该授权用户进入master端的数据库。
mysql -p
mysql > create user 'repl'@'%' identified by 'westos'; ##添加授权用户
mysql > grant replication slave on *.* to 'repl'@'%'; ##授权
cd /data/mysql
mysqlbinlog mysql-bin.000001 ##查看日志
mysqldump -p westos > dump.sql ##备份数据,所有的操作过程
scp dump.sql server2:
slave从库
vim /etc/my.cnf
server_id=2
设定server3为server1主机的slave端
mysqladmin -p create westos ##以管理员权限建库
mysql -p westos < dump.sql把一的数据导入到3
四、Mysql半同步复制
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay-log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
五、组从复制(多主模式)
组复制是一种技术,可用于实现 容错系统。 复制组是一组 每个服务器都有自己的完整数据副本(一个 无共享复制方案),并相互交互 通过消息传递。 通信层提供了一套 原子消息和全序消息等保证 送货。 这些是非常强大的属性,可以转化为 非常有用的抽象,可以用来构建更多 高级数据库复制解决方案
1、还原所有主从节点的设置
/etc/init.d/mysql stop 关闭
rm -fr /data/mysql/* 删除mysql数据
将vim /etc/my.cnf
中添加的参数全部删除
2、添加组复制的参数
[mysqld]
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"server_id=1 #根据主从节点写
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROWplugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "server1:33061" #根据主从节点写
group_replication_group_seeds= "server1:33061,server2:33061,server3:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="172.25.50.0/24,127.0.0.1/8"
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON
mysqld --initialize-insecure --user=mysql 初始化数据库,不使用密码
2、初始化完成
3、设置组
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'westos';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='westos' FOR CHANNEL 'group_replication_recovery';
mysql> SET GLOBAL group_replication_bootstrap_group=ON; #只在主节点输入,从节点不必输入,如果在其它从节执行此语句,那么该节点将会成为主节点,无法进行组合
mysql> START GROUP_REPLICATION; #启动组
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
4、查看组服务是否启动
SHOW PLUGINS;
一旦 START GROUP_REPLICATION语句返回,组已启动。 你可以检查 该组
在其他从节点执行完 2 、 3 步骤后,可查询到组中的所以节点
5、测试
在任意节点进行建库,建表,数据插入,在其他两个节点都可查询到
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
mysql> INSERT INTO t1 VALUES (1, 'Luis');