一、mysql安装部署
可以直接从官网下载
解压mysql 5.7版本安装包,5.7版本后的安装存在变化,分需要boost库的版本和不需boost库的版本
tar zxf mysql-boost-5.7.31.tar.gz
下载gcc gcc-c++ 及cmake
yum install gcc gcc-c++ cmake -y
配置安装
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_general_ci -DWITH_BOOST=/root/mysql-5.7.31/boost/boost_1_59_0/
make
make install
拷贝文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
修改my.cnf地址
vim /etc/my.cnf
将mysql命令加入系统全局变量
vim ~/.bash_profile
source ~/.bash_profile
添加msql用户
useradd -M -d /data/mysql -s /sbin/nologin mysql
创建mysql数据存储目录,修改所属组
mkdir -p /data/mysql
chown mysql.mysql /data/mysql/
初始化数据库
mysqld --initialize-insecure --user=mysql
进入存储目录,删除所有初始文件
cd /data/mysql
rm -fr *
重新创建用户,获得初始随机密码nWks8ha48J;-
mysqld --initialize --user=mysql
启动mysql,发现失败,原因是pid有问题
vim /etc/my.cnf
重启
修改密码
mysql_secure_installation
进入mysql,显示database
mysql -pwestos
show databases;
准备phpMyAdmin安装包,解压
unzip phpMyAdmin-5.0.2-all-languages.zip
创建软连接方便使用
cp -r phpMyAdmin-5.0.2-all-languages /usr/local/nginx/html
ln -s /usr/local/nginx/html/phpMyAdmin-5.0.2-all-languages /usr/local/nginx/html/phpMyAdmin
修改nginx配置,加入index.php,确保php模块也打开
vim /usr/local/nginx/conf/nginx.conf
打开nginx,浏览器访问http://172.25.34.1/phpMyAdmin
由于没有指定sock路径,此时无法登录,需要修改php主配置文件
vim /usr/local/php/etc/php.ini
重载php,重新登陆phpMyAdmin
systemctl reload php-fpm.service
用图形化界面建立名为zjm的数据库,user_tb表,进入mysql查看
mysql -pwestos
show databses;
mysql> use zjm;
mysql> show tables;
mysql> select * from user_tb;
二、mysql主从复制
从server1拷贝mysql安装目录、配置文件和启动文件到server2
scp -r /usr/local/mysql server2:/usr/local/mysql
scp /etc/my.cnf server2:/etc/
scp /etc/init.d/mysqld server2:/etc/init.d/
把mysql命令加入全局环境变量
vim ~/.bash_profile
source ~/.bash_profile
创建用户,创建数据库存储目录,修改所属人和组
useradd -M -d /data/mysql -s /sbin/nologin mysql
mkdir -p /data/mysql
chown mysql.mysql /data/mysql
初始化数据库
mysqld --initialize-insecure --user=mysql
/etc/init.d/mysqld start
mysql_secure_installation
在server1,修改配置重启mysql
vim /etc/my.cnf
/etc/init.d/mysqld restart
进入到mysql
创建一个用户,添加slave的权限,且是可以通过网络连接,在server2上测试是否能连接
grant replication slave on *.* to repl@'%' identified by 'westos';
修改server2的mysql配置文件,再次重启
将server1的mysql写入的数据先导入到server2的mysql
首先备份server1的数据
server2中,导入数据
mysqladmin -pwestos create zjm
mysql -pwestos zjm <dump.sql
mysql> select * from zjm.user_tb;
修改salve选择的master端,若有两个yes则成功
mysql> change master to master_host='172.25.34.1', master_user='repl', master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=437;
mysql> start salve;
mysql> show slave status\G;
三、Gtid实现主从复制
serevr1,server2互为master和slave
server1中修改mysql的配置文件,开启log-slave-updates和gid_mode功能
启用enforce_gtid_consistency功能的时候,MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行
vim /etc/my.cnf
重启,进入mysql
/etc/init.d/mysqld restart
mysql -pwestos
此时file已经变成了新的文件
server2中 修改mysql的配置文件,步骤同上
进入mysql,由于使用gtid,不需要指定日志文件和pos,MASTER_AUTO_POSITION = 1直接启用基于GTID的复制
stop slave;
change master to master_host='172.25.21.1', master_user='repl', master_password='westos',MASTER_AUTO_POSITION = 1;
start slave;
show slave status\G;
有两个yes,成功
server3快速配置mysql,步骤参上
回到server2,创建一个server3在同步server2的mysql时候的用户
grant replication slave on *.* to repl@'%' identified by 'westos';
备份mysql的数据,主从用了gtid时,用mysqldump备份时就要加–set-gtid-purged=OFF,否则你在主上导入恢复了数据,主没有了binlog日志,同步则不会被同步
mysqldump -pwestos 808bass --set-gtid-purged=OFF >dump.sql
scp dump.sql server3:
server3中
mysqladmin -pwestos create zjm
select * from 808bass.user_tb;
进入数据库,修改master 指向ip 172.25.34.2
change master to master_host='172.25.34.2', master_user='repl', master_password='westos',MASTER_AUTO_POSITION = 1;
开启slave查看状态
start slave;
show slave status\G;
此时在server1的mysql插入数据
insert into zjm.user_tb values ('11111');
server2查看数据是否同步
server3查看
四、mysql主从复制模式
1、默认异步复制
性能消耗低,但是容易出现主从数据唯一性问题
2、主从同步复制
数据完整性好,但是性能消耗高
3、主从半自动复制
介于上面两种之间。既能很好的保持完整性,又能提高性能
测试
首先在master端打开
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
在slave端打开
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
查看master插件状态,发现是关闭的
show status like 'rpl%';
启动插件
SET GLOBAL rpl_semi_sync_master_enabled =1;
打开slave端插件,发现仍然关闭
SET GLOBAL rpl_semi_sync_slave_enabled =1;
重新打开salve的io线程的thread
stop slave io_thread;
start slave io_thread;
在server1插入数据,可以看到有一个yes返回,没有no返回
此时slave数据已经复制完成
关闭slave的io_thread线程,再次在master插入数据,发现用时设置的超时时间为10s,等待十秒后,no返回1,yes不返回,切回默认主从异步复制
slave数据没有成功同步
再次打开io_thread,查看数据库内容,可以看到自动去匹配tgid然后复制缺少的数据