一、在redhat7.6上mysql8编译安装
1、mysql8的编译安装前的检查
cmake升级:(3.5版本以上)
下载:https://cmake.org/download/
安装:
升级gcc:(版本要求5.3以上)
设置centos源后安装:
2、编译安装mysql8
tar zxf mysql-boost-8.0.21.tar.gz
mkdir build
cd build
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-8.0.21/boost/boost_1_72_0/
make
make install
二、在redhat7.6上mysql5.7的编译安装
1、准备安装包、解压、安装cmake
yum -y install cmake
2、cmake编译mysql5.7
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
可能需要安装,视具体安装模块确定
yum -y install gcc-c++
yum install ncurses-devel.x86_64 -y
make
make install
3、拷贝启动脚本
cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld
4、新建用户
useradd -M -d /usr/local/mysql/ -s /sbin/nologin mysql
5、创建数据目录
cd ~
mkdir -p /data/mysql
chown mysql.mysql /data/mysql
6、添加变量
cd ~
vim .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/php/bin:/usr/local/mysql/bin
source .bash_profile
7、修改配置
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
[mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/var/run/mysqld.pid
/etc/init.d/mysqld start
/etc/init.d/mysqld stop
8、初始化数据库
mysqld --initialize --user=mysql
/etc/init.d/mysqld start
mysql_secure_installation
使用初始化生成的密码进入,并修改密码 如果输入密码没有进入,需要执行rm -fr /data/mysql/*,重新执行上面的步骤
9、phpMyAdmin的使用
phpMyAdmin 是众多 MySQL图形化管理工具中使用最为广泛的一种,是一款使用PHP 开发的基于B/S模式的 MySQL 客户端软件,该工具是基于 Web 跨平台的管理程序,并且支持简体中文,phpMyAdmin 为开发人员提供了类似 Access,SQL Server 的图形化数据库操作界面,通过该管理工具可以对 MySQL 进行各种操作,如何创建数据库,数据表和生成 MySQL 数据库脚本文件等
下载地址
https://www.phpmyadmin.net/
将解压后的phpmyadmin移动到/usr/local/nginx/html/phpadmin 默认发布录加入index.php页面
vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.html index.htm index.php index.jsp;
}
nginx -t
nginx -s reload
vim /usr/local/lnmp/php/etc/php.ini
[Pdo_mysql]
1056 pdo_mysql.default_socket=/data/mysql/mysql.aock
1165 mysqli.default_socket = /data/mysql/mysql.sock
systemctl restart php-fpm.service
此时浏览器访问http://172.25.73.1/phpadmin/index.php进入登陆界面,输入root用户和前面设定的密码即可进入 新建数据库westos。新建表linux,包含name、passwd,并加入数据。
三、mysql用户与授权
1. 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
username:要创建的用户名 host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符% password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
2、授权
GRANT privileges ON databasename.tablename TO 'username'@'host';
privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL databasename:数据库名 tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*
用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
3、设置与更改用户密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
如果是当前登陆用户更改密码用:
SET PASSWORD = PASSWORD("newpassword");
4、撤销用户权限
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
privilege, databasename, tablename:同授权部分
5、删除用户
DROP USER 'username'@'host';
6、mysql加密连接
CREATE USER 'username'@'%' IDENTIFIED BY 'password' REQUIRE SSL;
四、mysql主从复制
将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做);从而使得从数据库的数据与主数据库保持一致 主节点:172.25.73.1 从节点:172.25.73.2 | 172.25.73.3
1、将主节点的mysql安装到从节点
cd /usr/local/mysql
scp -r /usr/local/mysql/ server2:/usr/local/
scp -r /usr/local/mysql/ server3:/usr/local/
cd /etc
scp my.cnf server2:/etc/
scp my.cnf server3:/etc/
server2与server3
cd /usr/local/mysql/
cd support-files/
cp mysql.server /etc/init.d/mysqld
cd
vim .bash_profile
/usr/local/mysql/bin
source .bash_profile
useradd -M -d /usr/local/mysql -b /sbin/nologin mysql
mkdir -p /data/mysql
chown mysql.mysql /data/mysql/
mysqld --initialize --user=mysql
/etc/init.d/mysqld start
mysql_secure_installation
1、编辑主节点配置文件
vim /etc/my.cnf
server-id=1
log-bin=mysql-bin
log_slave_updates=ON
/etc/init.d/mysqld restart
mysql -p
mysql> show global variables like '%log%';
mysql> show master logs;
mysql> show global variables like '%server%';
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mysql> SHOW MASTER STATUS;
查看二进制日志是否开启 查看主节点二进制日志列表 查看主节点的server id 在主节点上创建有复制权限的用户 获取复制源的二进制日志坐标
3、编辑从节点配置文件
vim /etc/my.cnf
server-id=1
log-bin=mysql-bin
log_slave_updates=ON
/etc/init.d/mysqld restart
mysql -p
mysql> show global variables like '%server%';
查看主节点的server id 在从节点配置访问主节点的参数信息
添加 主节点主机,访问主节点的用户名及密码,主节点二进制文件信息。 注意:主节点的二进制文件一定要是二进制列表中的最后一个二进制文件。
show master logs;
CHANGE MASTER TO MASTER_HOST='172.25.73.1',MASTER_USER='repl',MASTER_PASSWORD='westos', MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=1898;
启动复制线程
START SLAVE;
查看从节点的状态信息
show slave status\G
4、测试:
主从复制同步之前必须保持两个数据库已经存在的数据相同,所以需要将server1的备份文件导入在server2的库中
mysqldump -p westos > dump.sql
scp dump.sql server2:
在server2中必须提前建立和server1一样的数据库westos
mysql -p westos < dump.sql
此时两个数据库已经完全一样
在主节点创建数据库,并查看主节点二进制日志信息
在从节点查找二进制日志信息,并查看mydb数据库是否复制成功
五、GTID复制
1、sver1配置(主节点)
vim /etc/my.cnf
\\\
[mysqld]
gtid_mode=ON
enforce-gtid-consistency=ON
\\\
/etc/init.d/mysqld restart
2、server2配置(从节点)
mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='172.25.73.1',MASTER_USER='repl',MASTER_PASSWORD='westos', MASTER_AUTO_POSITION = 1;
mysql> start slave;
3、server3配置(从节点)
mysql> stop slave;
mysql> CHANGE MASTER TO MASTER_HOST='172.25.73.2',MASTER_USER='repl',MASTER_PASSWORD='westos', MASTER_AUTO_POSITION = 1;
mysql> start slave;
六、Mysql半同步复制
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay-log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
对照官方文档
https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-installation.html
1、在server1上
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
在server1上查看
mysql> show status like '%rpl%'
| Rpl_semi_sync_master_status | ON |
看到 ON表示已开启
2、在server2上
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
重启IO线程使半同步生效
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
在server2上查看
3、测试:
在server2上关闭slave模拟存在一个故障
stop slave;
在server1上给表插入数据 等待10s才成功,因为上面超时时间是10s,10s后如果没有收到slave节点的返回,就会切换到异步复制,再次插入时就不会延迟,因为已经是异步了
七、Mysql异步复制
MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
八、组复制
组复制是一种技术,可用于实现 容错系统。 复制组是一组 每个服务器都有自己的完整数据副本(一个 无共享复制方案),并相互交互 通过消息传递。 通信层提供了一套 原子消息和全序消息等保证 送货。 这些是非常强大的属性,可以转化为 非常有用的抽象,可以用来构建更多 高级数据库复制解决方案 官网帮助文档
https://dev.mysql.com/doc/refman/5.7/en/group-replication.html
1、server1(master)节点
systemctl stop mysqld 关闭mysqld
rm -fr /var/lib/mysql 删除mysql数据
|