CentOS 8 用Yum安装MySQL 8.0(更新构建主备模式)
一、添加Yum仓库
下载完成后用SecureCRT连接到服务器,用rz命令将rpm包上传到服务器
然后在服务器执行命令安装rpm包(如果已经是用root账号登录,下面所有命令都无需加sudo):
#sudo yum localinstall mysql80-community-release-el8-1.noarch.rpm
二、停用CentOS 8自带的MySQL模块
因为CentOS8的内核自带了MySQL模块,不停用是不能安装新版本的,需执行命令停用:
#sudo yum module disable mysql
三、安装MySQL并启用
#sudo yum install mysql-community-server
安装好之后千万别先启动 !!!
MySQL8默认大小写敏感,改为不敏感只会在初始化的时候起作用,
编辑配置文件my.cnf
#vi /etc/my.cnf
下图为没更改过的初始配置
在最下面追加lower_case_table_names = 1
另外,/var/lib/mysql目录是默认的数据库存储路径,通常情况下需要改为其它空间较大的位置,有需要的话可以修改datadir和socket
如果修改了socket,别忘记建立软连接,不然无法使用mysql -u命令登录,建立软连接,
ln -s /……新路径……/mysql.sock /var/lib/mysql/mysql.sock
关闭selinux
永久关闭:
vi /etc/selinux/config
内容改为
SELINUX=disabled
临时关闭:
setenforce 0
接下来设置开机自启并启动mysql
#sudo systemctl enable mysqld
#sudo systemctl start mysqld
#sudo systemctl status mysqld
查询生成的root密码:
#sudo grep 'temporary password' /var/log/mysqld.log
注意如果系统之前安装过MySQL则必须删除残留数据,不然会生成不了root密码,删除残留数据命令:
#sudo rm -rf /var/lib/mysql
#sudo systemctl restart mysqld
查到生成的初始密码后,登录MySQL修改root密码:
#mysql -uroot -p
输入初始密码后执行SQL命令:
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
通常不会用root账号来连接MySQL服务器,所以需要建个账号:
mysql>CREATE USER 'test'@'%' IDENTIFIED BY 'MyNewPass4!';
%代表任意IP都可以连接,localhost代表只有本机可以连接
建好账号后赋予权限:
mysql>GRANT ALL PRIVILEGES ON *.* to 'test'@'%' WITH GRANT OPTION;
此时用Navicat客户端连接MySQL可能会出现2059错误连接不上,是因为MySQL8更改了加密方式,将加密方式改回原版的:
mysql>ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'MyNewPass4!';
mysql>show variables like '%time_zone%';
mysql>set time_zone='+8:00';
mysql> select now();
mysql> flush privileges;
退出MySQL:
mysql>exit
现在可以用Navicat连接到MySQL了,MySQL8的默认字符集为utf8mb4,连emoji表情都默认可存了,无需再为字符集操心。
主备模式构建:
主库配置,建立账号,赋予权限,注意密码加密方式改为上文中的,否则备库查看slave状态时会提示Last_IO_Error错误
CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
GRANT replication slave ON *.* TO 'repl'@'%';
flush privileges;
vi /etc/my.cnf
[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
sync_binlog = 1
binlog_format = ROW
binlog_do_db = test
binlog_ignore_db= mysql
default_authentication_plugin = mysql_native_password
server_id用于给服务器编号,注意主备编号不要重复。
log_bin:Binlog存储路径。
sync_binlog:开启Binlog同步,在每次提交事务前会将二进制日志同步到磁盘。
binlog_format:binlog的日志格式,选择基于行的复制。
binlog_do_db:需要记录Binlog进行备份的数据库名,有多个的话设置多行(注意做好主备后再去建对应的数据库)。
binlog_ignore_db:忽略的DB。
default_authentication_plugin配置客户端连接的认证方式配置
在/var/log/下创建mysql文件夹,修改用户权限
chown -R mysql:mysql mysql
重启
systemctl restart mysqld
登录mysql查看主库状态
show master status;
配置备库
vi /etc/my.cnf
[mysqld]
server_id = 2
log_slave_updates = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
replicate_do_db = test
replicate_ignore_db = mysql
在/var/log/下创建mysql文件夹,修改用户权限
chown -R mysql:mysql mysql
systemctl restart mysqld
登录备库设置与主库的连接
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.xx.xx',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;
MASTER_HOST设置成主机的IP。MASTER_USER和MASTER_PASSWORD是我们之前在主机设置的用于复制的专用账号和密码。
MASTER_LOG_FILE需要和通过查看主库状态的binlog文件一致。
MASTER_LOG_POS复制位置默认为0,表示从头开始跟踪事件。这种配置可能不是最好的,比如数据库本来就很大,可以先手动同步一次。
START SLAVE;
SHOW SLAVE STATUS\G;
Last_IO_Error无错误,并有如下显示则成功:
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
查看主库
show processlist;
显示
Source has sent all binlog to replica; waiting for more updates
查看备库
show processlist;
显示
Replica has read all relay log; waiting for more updates