首次使用Navicat,连接SQL server的时候如果没有安装对于的模块会提示 "[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序" 错误,
原因是没有安装对应的模块msodbcsql_64.msi,相关文件在程序根目录有提供,所以在安装目录找到对应文件安装即可。
分类: SQL
sql
SQL Server 无域通过证书设置主体镜像+见证服务器
搭建的时候参考了两篇文档
SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总) - 郭大侠1
个人操作总结:
1、环境准备:
最好相同系统,相同sqlserver版本,相同目录,相同IP段
SQL Server最好2005sp1 及以上,且是企业/开发/数据库中心版
2、操作步骤
>1、创建数据库密钥——创建出站证书——用证书创建端点——创建登录账户——为登录账户创建用户——使用证书为用户授权——授权端口
>2、备份数据库——还原数据库——创建镜像——添加见证服务器
注意:
为了操作方便,可以先分别创建密钥、证书、端点、账户后相互分发证书,然后再创建其他两个服务器登录用户并授权提高效率,操作过程中使用命令大致相同,容易搞混,要细心
新安装 步骤
主服务器HostA | 从服务器HostB | 见证服务器HostC |
1.创建数据库密钥 | 1.创建数据库密钥 | 1.创建数据库密钥 |
2.基于1密钥创建出站证书 | 2.基于1密钥创建出站证书 | 2.基于1密钥创建出站证书 |
3.使用证书创建端点 | 3.使用证书创建端点 | 3.使用证书创建端点 |
4.导出证书并复制到其他服务器 | 4.导出证书并复制到其他服务器 | 4.导出证书并复制到其他服务器 |
5.为 从/见证 服务器创建登录名 | 5.为 主/见证 服务器创建登录名 | 5.为 主/从 服务器创建登录名 |
6.创建使用登录名5的用户 | 6.创建使用登录名5的用户 | 6.创建使用登录名5的用户 |
7.使用证书为6中用户授权 | 7.使用证书为6中用户授权 | 7.使用证书为6中用户授权 |
8.对5中登录名进行端点授权 | 8.对5中登录名进行端点授权 | 8.对5中登录名进行端点授权 |
9.主数据库设置为完全恢复,并全备复制到从服务器 | 9.以norecovery模式还原需要镜像的库 | |
10.(后做)设置镜像伙伴 | 10.(先做)设置镜像伙伴 | |
11.检验主从切换 | 11.检验主从切换 |
实操SQL命令
下面例子password的值自行修改,HostB和HostC命令和HostA大致相同,注意修改下对应的名称
主体服务器HostA | 镜像服务器HostB | 见证服务器HostC | |
1.创建密钥 | USE master; CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Password'; |
同HostA | 同HostA |
2.创建证书 | CREATE CERTIFICATE CertA WITH Subject = 'CertA', Expiry_Date = '2030-1-1'; |
CREATE CERTIFICATE CertB WITH Subject = 'CertB', Expiry_Date = '2030-1-1'; |
CREATE CERTIFICATE CertC WITH Subject = 'CertC', Expiry_Date = '2030-1-1'; |
3.创建端点 | CREATE ENDPOINT [DatabaseMirroring] STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION =CERTIFICATE CertA, ENCRYPTION = REQUIRED Algorithm AES, ROLE =ALL ); |
同HostA 改CertA为CertB |
同HostA 改CertA为CertC |
4.备份证书 | BACKUP CERTIFICATE CertA TO FILE = 'C:\Users\Administrator\Desktop\CertA.cer' |
同HostA 改CertA为CertB |
同HostA 改CertA为CertC |
把生成的证书分别复制到另外两个服务器 | |||
5.创建账户 | CREATE LOGIN LoginB WITH PASSWORD = 'Password'; CREATE LOGIN LoginC WITH PASSWORD = 'Password'; |
同HostA 改LoginB为LoginA |
同HostA 改LoginC为LoginA |
6.创建用户 | CREATE USER UserB For Login LoginB; CREATE USER UserC For Login LoginC; |
同HostA 改CertB为CertA 改LoginB为LoginA |
同HostA 改CertC为CertA 改LoginC为LoginA |
7.证书授权 | CREATE CERTIFICATE CertB AUTHORIZATION UserB FROM FILE = 'C:\Users\Administrator\Desktop\CertB.cer';CREATE CERTIFICATE CertC AUTHORIZATION UserC FROM FILE = 'C:\Users\Administrator\Desktop\CertC.cer'; |
同HostA 改CertB为CertA 改UserB为UserA |
同HostA 改CertC为CertA 改UserC为UserA |
8.端口授权 | GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [LoginB]; GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [LoginC]; |
同HostA 改LoginB为LoginA |
同HostA 改LoginC为LoginA |
9.备份与还原
数据库——右键-任务——备份
复制到镜像服务器——数据库——右键-任务——还原
10.创建镜像
分别看下网络地址格式如 TCP://win-xxxxx:5022
1).先在镜像机执行
ALTER DATABASE 数据库名
SET PARTNER = '主体服务器地址tcp://xxxx:5022';
2).之后在主体机执行
ALTER DATABASE 数据库名
SET PARTNER = '镜像服务器地址tcp://xxxx:5022';
11.测试故障切换
数据库——任务——镜像——开始故障转移
12.加入见证服务器
在主体服务器添加
数据库——任务——镜像——填入主体服务器地址
Mysql提示too manny connections
虚拟主机站点较多的时候比较容易出现连接数过多错误,这个时候mysql卡死,可以尝试重启MySQL服务,如果MySQL服务无法重启,只能重启下服务器
可以通过设置最大连接数,连接超时时间,连接断开时间来优化,可以通过如下命令查看
show variables like "max_connections";
show variables like "wait_timeout";
show variables like "interactive_timeout";
max_connections 一般为100, 可以设置为1000或更多
wait_timeout 一般为28800,可以设置为500 或其它
interactive_timeout 一般为28800,可以设置为600 或其它
可以登录MySQL进行设置,但是重启MySQL会丢失设置,如需永久设置,可以修改MySQL配置文件,my.conf 或 my.ini 来达成,添加如下到配置文件,重启MySQL
max_connections=1000
wait_timeout=500
interactive_timeout=600
PHP测试MySQL数据库连接是否正常
$db_host = "数据库地址";
$db_user = "数据库用户名";
$db_pwd = "数据库密码";
$db_name = "数据库名";
$db_prefix = "数据库表前缀";
$link = @mysql_connect($db_host, $db_user, $db_pwd);
if(!$link){
exit("mysql connect failed");
}
else{
echo "mysql connect success";
}
if(!mysql_select_db($db_name, $link)){
exit("database ".$db_name." connct failed");
}
else{
echo "database ".$db_name." connect success";
}
$sql = "Select * from 某个表";
$result = mysql_query($sql);
echo $result;
while($row = mysql_fetch_row($result))
print_r($row);
mariadb设置root密码
终端使用msyql进入maridb,输入如下命令进行root密码的设置
use mysql;
set password for 'root'@'localhost'=password('Abc123456');
flush privileges;
批处理获取数据库为空的数据库名
通过脚本实现批量获取数据库表为空的数据库,
流程:
获取所有数据库名
show databases;
获取数据库中表的数量
SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES GROUP BY table_schema;
然后,对比两个文件提取出数据库表的数量为0的数据库名
方法一
findstr %%i databases-real.txt || echo %%i >>null-databases.txt
方法二
findstr %%i databases-real.txt > tmp
for %%a in ("tmp") do (
if "%%~za" equ "0" (
echo %%i >> null-databases.txt
))
完整脚本实现如下,暂时提供Windows下面的批处理脚本,Linux下面的也类似
关闭mysql日志
修改/etc/my.cnf 文件,找到
log-bin=mysql-bin
binlog_format=mixed
使用#进行注释,如下
#log-bin=mysql-bin
#binlog_format=mixed
重启mysql
mysql restart
删除mysql日志文件
-
使用mysql命令删除
查看有哪些日志文件
show binary logs;
查看正在使用的日志文件,名称类似mysql-bin.0000x
show master status;
删除除了mysql-bin.0000x日志文件以外的日志文件
purge binary logs to 'mysql-bin.0000x';
以上三条命令可以删除不用的二进制文件,下面这个命令慎用
删除index文件中列出的所有二进制日志文件,将index文件清空,并创建一个新的二进制日志文件,
reset master;
reset slave;
注意:
reset master删除index文件中列出的所有二进制日志文件,将index文件清空,并创建一个新的二进制日志文件。
使用这个命令要很小心,以免丢失二进制日志文件数据。
reset master也会清空gtid_purged系统变量的值,也会清空系统变量gtid_executed在global上的值(session级别不会清空)。
在5.7.5之后,也会清空mysql.gtid_executed表的值。
reset master与purge binary logs的不同点:
1.reset master移除index文件中列出的所有的二进制日志文件,并创建一个新的空日志文件,从.000001重新开始。purge binary logs不会将日志从.00001重新开始。
2.reset master不要在slave还在运行的时候执行。purge binary logs命令可以在slave还在运行的时候执行。
reset master这个命令会锁住所有对象,并阻塞数据库连接。如果二进制日志文件较多,reset master操作可能会占用很多时间。
Ctrl+C是无法中断操作的。一旦执行,就只好等待操作结束,abort可能会造成很多未知影响。如果只是想清除部分数据,使用purge命令就行
-
设置mysql定时清理日志文件,
mysql的配置文件my.cnf设置expire_logs_days=7, 重启mysql配置仍在
set global expire_logs_days = 7; 通过mysql命令执行,重启后配置会重置0
Mysql启动失败 提示 error i/o error reading the header from the binary log
宝塔mysql启动不了,
进入mysql的data目录,宝塔安装路径,Windows如果有两个盘,一般在D:/btsoft/mysql/data,Linux一般在/www/btpanel/mysql/data
查看后缀为.err的错误日志文件,发现提示
error i/o error reading the header from the binary log
Can't init tc log
Could not open log file. xxxx-bin.000xxxx
出现这个情况一般是因为手动删除了日志文件导致,
解决办法,
打开数据库数据目录下,也就是同目录下的xxx-bin.index,然后把里面提示错误的对应的行删除,就可以启动MySQL了
MariaDB安装wordpress
1、创建用户
create user wordpress@localhost identified by '123456';
2、创建数据库
create database wordpress;
3、赋予用户数据库权限
grant all on wordpress.* to 'wordpress'@'localhost' with grant option;
4、安装
wp-content 给予 写入权限,上传图片写入此目录