安装
一.创建目录
ln -s mysql-5.6.50-linux-glibc2.12-x86_64/ mysql mkdir /opt/mysql/data #数据目录 mkdir /opt/mysql/log #日志目录 mkdir /opt/mysql/etc #配置文件目录
二.创建用户
groupadd mysql useradd -r -g mysql mysql
三、创建my.cnf
创建my.cnf文件的目的主要是为了初始化时要用到它里面的一些配置
cp support-files/my-default.cnf /etc/my.cnf #增加以下内容 vim /etc/my.cnf user = mysql basedir = /opt/mysql datadir = /opt/mysql/data socket = /tmp/mysql.sock server_id = 1 port = 3306 log-error=/opt/mysql/log/error.log log_bin=/opt/mysql/log/binlog [mysql] socket = /tmp/mysql.sock touch /opt/mysql/log/error.log
注意:如果系统中其它目录下还存在my.cnf文件请删除,可以用find查找一下
四、安装
1.安装插件
apt-get install libaio1
2.初始化
cd /opt/mysql scripts/mysql_install_db --user=mysql --defaults-file=/etc/my.cnf --basedir=/opt/mysql --datadir=/opt/mysql/data --innodb_undo_tablespaces=3 --explicit_defaults_for_timestamp chown -R mysql:mysql /opt/mysql-5.6.50-linux-glibc2.12-x86_64
3.配置mysql启动服务
cp support-files/mysql.server /etc/init.d/mysql vim /etc/init.d/mysql basedir=/opt/mysql datadir=/opt/mysql/data chmod +x /etc/init.d/mysql
4.配置环境变量
vim /etc/profile.d/mysql.sh export PATH=/opt/mysql/bin:$PATH source /etc/profile.d/mysql.sh
注意:如果你当前安装用户是一个sudo
用户,那么你前面的一些操作都需要加上sudo
,但是source
这里就不需要加了
5.启动服务
cd /etc/init.d/ ./mysql start systemctl status mysql systemctl start mysql
注意:如果当前用户没有权限,这里需要加上sudo启动
6.登入mysql
mysql -uroot #修改密码 mysqladmin -uroot password enkaifeng_2023 #root远程登录 #会删表,可能是bug use mysql; update user set Host='%' where User='root'; #ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 不予理会 flush privileges; #上面的有毒 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'enkaifeng_2023' WITH GRANT OPTION; #mysql5.7及以前版本 CREATE USER 'root'@'%' IDENTIFIED BY 'root';grant all privileges on *.* to 'root'@'%' ; #mysql 8 flush privileges; use mysql select user,host from user; SELECT User, Password, Host FROM user;
主从复制
master
[root@master ~]#vim /etc/my.cnf [mysqld] log_bin=/opt/mysql/log/binlog server-id=8 #主机IP的最后一位数 [root@master ~]#systemctl restart mysql [root@master ~]#mysql mysql> SHOW MASTER LOGS; #查看二进制文件的开始位置156 +---------------+-----------+-----------+ | Log_name | File_size | Encrypted | +---------------+-----------+-----------+ | binlog.000001 | 156 | No | +---------------+-----------+-----------+ 1 row in set (0.00 sec) mysql> create user repluser@'10.0.0.%' identified by 'enkaifeng2023'; #创建用户,账号,先查看日志位置再创建账号 mysql> grant replication slave on *.* to repluser@'10.0.0.%'; #授权
slave
[root@slave ~]#vim /etc/my.cnf [mysqld] server-id=28 #主机IP的最后一位数 read-only=on #只读 relay_log=relay-log #relay log的文件路径,默认值`hostname`-relay-bin relay_log_index=relay-log.index #默认值`hostname`-relay-bin.index mysql> help CHANGE MASTER TO; #查看语法 mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.8', #主服务器IP MASTER_USER='repluser', #主服务器复制账号 MASTER_PASSWORD='123456', #账号密码 MASTER_PORT=3306, #端口 MASTER_LOG_FILE='binlog.000001', #二进制文件 MASTER_LOG_POS=156, #二进制文件的起始位置 MASTER_CONNECT_RETRY=10; #重试时间连接 mysql> show slave status\G; #查看从节点信息 *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.0.0.8 #主节点主机 Master_User: repluser #账号 Master_Port: 3306 #端口 Connect_Retry: 60 Master_Log_File: mariadb-bin.000002 #二进制文件 Read_Master_Log_Pos: 156 #二进制位置 Relay_Log_File: mariadb-relay-bin.000002 #复制到本机的日志文件 Relay_Log_Pos: 4 #二进制位置 Relay_Master_Log_File: mariadb-bin .000002 Slave_IO_Running: NO #IO线程 Slave_SQL_Running: NO #SQL线程 Seconds_Behind_Master: 0 #复制的延迟时间,0秒 mysql> start slave; #启动线程,会同时开启IO线程和SQL线程 mysql> show processlist; #查看线程 #复制的延迟时间:见下图 mysql> flush privileges; #刷新权限
在从节点清除信息CHANGE MASTER TO
注意:以下都需要先 STOP SLAVE
RESET SLAVE; #从服务器清除master.info ,relay-log.info, relay log ,开始新的relay log RESET SLAVE ALL; #清除所有从服务器上设置的主服务器同步信息,如HOST,PORT, USER和 PASSWORD等
停止从属服务器
stop slave; RESET SLAVE ALL;
备份还原数据库
mysqldump -uroot -p<密码> hellodb students > /data/bakup/hellodb.sql #导出库数据 CREATE DATABASE 'hellobd' #创建数据库 mysql hellodb < /data/backu/hellodb.sql #还原数据库的数据
MYSQL查看操作日志
查看日志状态命令:
mysql> SHOW VARIABLES LIKE 'gen%'; #未开启状态 +------------------+------------------------------+ | Variable_name | Value | +------------------+------------------------------+ | general_log | OFF | | general_log_file | /opt/mysql/data/ecs-886c.log | +------------------+------------------------------+ mysql> SET GLOBAL general_log=ON; #开启 Query OK, 0 rows affected (0.00 sec) mysql> SHOW VARIABLES LIKE 'gen%'; +------------------+------------------------------+ | Variable_name | Value | +------------------+------------------------------+ | general_log | ON | | general_log_file | /opt/mysql/data/ecs-886c.log | +------------------+------------------------------+ 2 rows in set (0.00 sec)
修改记录日志格式
mysql> SHOW VARIABLES LIKE 'log_output'; #查看格式 +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | FILE | #文件形式 +---------------+-------+ 1 row in set (0.00 sec) mysql> SET GLOBAL log_output='TABLE'; #修改为表格 mysql> SHOW VARIABLES LIKE 'log_output'; #查看格式 +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | TABLE | #文件形式 +---------------+-------+ 1 row in set (0.00 sec) mysql> SELECT * FROM mysql.general_log; #通过命令查看日志 #使用数据库表记录操作日志会增加数据的压力,因此建议使用文件记录操作日志 mysql> SET GLOBAL log_output='FILE'; mysql> TRUNCATE TABLE mysql.log_output;