1. 安装设置mysql
1.1. 安装mysql
yum -y install yum-utils
rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-9.noarch.rpm
rpm -ivh https://repo.mysql.com/yum/mysql-8.0-community/sles/12/x86_64/mysql-community-server-8.0.4-0.1.rc.sles12.x86_64.rpm
yum-config-manager --disable mysql57-community
yum-config-manager --enable mysql80-community
yum install mysql-community-server -y
systemctl start mysqld
systemctl enable mysqld
1.2. 找登录密码
grep "password" /var/log/mysqld.log
1.3. 登录
mysql -uroot -p
1.4. 设置密码安全策略
mysql 5.5+
在mysql控制台下
set global validate_password_policy=0;
当次生效
或者
在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略
选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件
validate_password_policy=0
如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:
validate_password = off
mysql 8.0+
set global validate_password.policy=0;
set global validate_password.length=1;
1.5. 设置密码
在mysql控制台下
set password = password('new_password');
1.6. 创建新账号增加权限
grant all privileges on *.* to 'username'@'%' identified by 'password' with grant option;
FLUSH PRIVILEGES;
grant all privileges on gogs.* to 'git'@'%' identified by 'password' with grant option;
FLUSH PRIVILEGES;
2. 命令行执行SQL
mysql -h127.0.0.1 -uusername -ppassword -e "create database zabbix character set utf8 collate utf8_bin;"
mysql -h127.0.0.1 -uusername -ppassword -e "grant all privileges on *.* to 'username'@'%' identified by 'password' with grant option;"
mysql -h127.0.0.1 -uusername -ppassword < server/createdb.sql
3. 密码恢复
3.1. 停止mysqld;
(1). /etc/init.d/mysql stop
(2). killall -TERM mysqld
(您可能有其它的方法,总之停止mysqld的运行就可以了)
3.2. 用以下命令启动MySQL,以不检查权限的方式启动;
mysqld --skip-grant-tables &
3.3. 然后用空密码方式使用root用户登录 MySQL
mysql -u root
3.4. 修改root用户的密码
mysql> update mysql.user set password=PASSWORD('newpassword') where User='root';
mysql> flush privileges;
mysql> quit
重新启动MySQL
/etc/init.d/mysql restart
就可以使用新密码 newpassword 登录了。
4. xpath
SELECT id, FROM_UNIXTIME(CAST(EXTRACTVALUE ( DATA, '/coder/datas/GuildWorldBoss/Start' )/1000 AS UNSIGNED ), '%Y-%c-%d %H:%i:%s' ) AS StartTime FROM guildwb
5. mysql执行log开启
5.1. 查看状态
SHOW VARIABLES LIKE’general_log%’;
5.2. 开启
SET GLOBAL general_log =’ON’;
5.3. 关闭
SET GLOBAL general_log =’OFF’;
6. 配置
mysql 5.7以上版本默认开启ssl关闭方式如下 vim /etc/my.cnf 增加 skip_ssl
7. mysql数据库注意点
7.1. on duplicate key update 死锁问题
如果遇到这个问题怎么办呢?我们有下面的一些方法来解决这个问题:
使用mysql5.6版本,可以看见这个是在5.7中引入的,5.6中不会出现这个情况
使用RC级别,RC隔离级别下不会有gap锁
-- 不要使用 insert on duplicate key update,使用普通的insert。我们最后使用的就是这个方法,因为ON DUPLICATE KEY UPDATE 这个在代码中的确是没有必要
在数据库表中只建立主键,不建立其他唯一索引。
先insert 再捕获异常,然后进行更新
使用insert ignore,然后判断update rows 是否是1,然后再决定是否更新。
8. mysqlserver8.0问题点
mysql server errorlog忽然爆出大量的sha256_password’ is deprecated and will be removed in a future release.
select user,host,plugin from mysql.user; INSTALL PLUGIN CONNECTION_CONTROL SONAME ‘connection_control.so’; INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME ‘connection_control.so’; select * from information_schema.connection_control_failed_login_attempts;
经过排查和确认,某程序的加密方式与MySQL 8.0 caching_sha2_password 不兼容导致的,可以通过使用 mysql_native_password 创建用户尝试避开不兼容的问题
9. mysqlserver innodb_autoinc_lock_mode用途
AUTO_INCREMENT Handling in InnoDB InnoDB提供了一个可配置的锁定机制,可以显着提高使用AUTO_INCREMENT列向表中添加行的SQL语句的可伸缩性和性能。 要对InnoDB表使用AUTO_INCREMENT机制,必须将AUTO_INCREMENT列定义为索引的一部分,以便可以对表执行相当于索引的SELECT MAX(ai_col)查找以获取最大列值。 通常,这是通过使列成为某些表索引的第一列来实现的。
本节介绍AUTO_INCREMENT锁定模式的行为,对不同AUTO_INCREMENT锁定模式设置的使用含义,以及InnoDB如何初始化AUTO_INCREMENT计数器。
InnoDB AUTO_INCREMENT锁定模式
InnoDB AUTO_INCREMENT锁定模式使用含义
InnoDB AUTO_INCREMENT计数器初始化
SELECT @@innodb_autoinc_lock_mode;
9.1. innodb_autoinc_lock_mode 的说明
innodb_auto_lockmode有三个取值: 1、0 这个表示tradition 传统 2、1 这个表示consecutive 连续 3、2 这个表示interleaved 交错
9.2. tradition(innodb_autoinc_lock_mode=0) 模式:
1、它提供了一个向后兼容的能力 2、在这一模式下,所有的insert语句(“insert like”) 都要在语句开始的时候得到一个 表级的auto_inc锁,在语句结束的时候才释放这把锁,注意呀,这里说的是语句级而不是事务级的, 一个事务可能包涵有一个或多个语句。 3、它能保证值分配的可预见性,与连续性,可重复性,这个也就保证了insert语句在复制到slave 的时候还能生成和master那边一样的值(它保证了基于语句复制的安全)。 4、由于在这种模式下auto_inc锁一直要保持到语句的结束,所以这个就影响到了并发的插入。
9.3. consecutive(innodb_autoinc_lock_mode=1) 模式:
1、这一模式下去simple insert 做了优化,由于simple insert一次性插入值的个数可以立马得到 确定,所以mysql可以一次生成几个连续的值,用于这个insert语句;总的来说这个对复制也是安全的 (它保证了基于语句复制的安全) 2、这一模式也是mysql的默认模式,这个模式的好处是auto_inc锁不要一直保持到语句的结束,只要 语句得到了相应的值后就可以提前释放锁
9.4. interleaved(innodb_autoinc_lock_mode=2) 模式
1、由于这个模式下已经没有了auto_inc锁,所以这个模式下的性能是最好的;但是它也有一个问题,就是 对于同一个语句来说它所得到的auto_incremant值可能不是连续的。