一、前言

今天公司要切换数据库服务器,数据库文件大于2G,结果再附加到另风流倜傥服务器的数据Curry面,就发生了一个难点。如下:

标题:Microsoft SQL Server Management Studio
------------------------------
无法为此请求检索数据。(Microsoft.SqlServer.SmoEnum)
------------------------------
其他信息:
执行 Transact-SQL 语句或批处理时发生了异常。(Microsoft.SqlServer.ConnectionInfo)
------------------------------
E:\DATA\数据库名.mdf 不是主数据库文件。(Microsoft SQL Server,错误:5171)

一、简介

MySQL是最盛行的开放源码SQL数据库管理序列,它是由MySQL
AB公司开支、宣布并援救的。有以下特点:

  • MySQL是风流潇洒种数据库管理种类。
  • MySQL是少年老成种关周密据库管理种类。
  • MySQL软件是风流倜傥种开放源码软件。
  • MySQL数据库服务器械备高效、可信赖和易于使用的特点。
  • MySQL服务器工作在客商端/服务器方式下,或嵌入式系统中。
  • 有雅量可用的分享MySQL软件。

MySQL表最大能实现多少?

InnoDB存款和储蓄引擎将InnoDB表保存在二个表空间内,该表空间可由数个文件成立。那样,表的轻重就会抢先单独文件的最大体量。表空间可总结原始磁盘分区,进而使得超级大的表变为或许。表空间的最大体量为64TB。

 

 

二、应用方案

在英特网找了无数情势,末了在CSDN上找到了相关的解决措施,经测量检验可用。

use master
go
sp_detach_db '数据库名' -- 分离数据库
go
sp_attach_db '数据库名','E:\数据库名.mdf','E:\数据库名.ldf' -- 附加数据库文件
go

网络来看的整治了须臾间。

在SQL Server
7.0中,微软生产了sp_attach_dbsp_attach_single_file_db系统存款和储蓄进程。
它对于SQL Server数据库管理员推行下边包车型大巴义务是这些方便的:

  • sp_attach_db:直接将.MDF和.LDF文件附加到服务器。
  • sp_attach_single_file_db:只附加.MDF文件。
  • sp_detach_db:将数据库从多个服务器分离。复制.MDF文件到另多少个服务器上,然后使用sp_attach_db系统存款和储蓄进程重新附加那一个文件到四个服务器上。

纵然它对于SQL
Server数据库管理员是很有用的,可是在使用那四个存款和储蓄进度时是有风姿洒脱对约束的。约束如下:

  • 不可能附加四个日志文件。
  • 不能够附加17个以上的公文。

在SQL Server
二〇一〇中,微软发表上边的种类存款和储蓄进程就要未来的版本中被舍弃。而她们在”Create
Database”
SQL语句中加多了二个从句”For Attach”。
上面介绍使用”For
Attach”从句的有余艺术,以征服在运用sp_attach_db和sp_attach_single_file_db时要面临的节制。

二、安装MySQL

下载MySQL地址:

CentOS 安装:

yum install mysql-server

Ubuntu 安装:

1. sudo apt-get install mysql-server
2. sudo apt-get isntall mysql-client
3. sudo apt-get install libmysqlclient-dev

# 检测是否安装成功(是否为LISTEN状态)
sudo netstat -tap | grep mysql

编写翻译安装MySQL-5.5.32:

图片 1

# 安装依赖包
yum install ncurses-devel gcc gcc-c++ -y

# 创建目录
mkdir -p /home/oldsuo/tools

# 安装cmake软件,gmake编译安装
cd /home/oldsuo/tools/
tar xf cmake-2.8.8.tar.gz
cd cmake-2.8.8
./configure
#CMake has bootstrapped.  Now run gmake.
gmake
gmake install
cd ../


# 开始安装mysql
# 创建用户和组
groupadd mysql
useradd mysql -s /sbin/nologin -M -g mysql

# 解压编译MySQL
tar zxf mysql-5.5.32.tar.gz 
cd mysql-5.5.32
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
-DMYSQL_DATADIR=/application/mysql-5.5.32/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0

#-- Build files have been written to: /home/oldsuo/tools/mysql-5.5.32
提示: 编译时可配置的选项很多,具体可参考结尾附录或官方文档:

make
#[100%] Built target my_safe_process
make install
ln -s /application/mysql-5.5.32/ /application/mysql
如果上述操作未出现错误,则MySQL5.5.32软件cmake方式的安装就算成功了。


#拷贝配置文件
cp mysql-5.5.32/support-files/my-small.cnf /etc/my.cnf

#添加变量,并使之生效
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
source /etc/profile
echo $PATH

#授权用户及/tmp/临时文件目录
chown -R mysql.mysql /application/mysql/data/
chmod -R 1777 /tmp/

#初始化数据库
cd /application/mysql/scripts/
./mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql
cd ../

#启动数据库
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld  start

#检查端口
netstat -lntup|grep 3306

图片 2

Preface

三、案例

-- 创建测试数据库
use master
go
CREATE DATABASE TestDB
ON
(
    NAME = TestDB,
    FILENAME = 'D:\TestDB.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5,
)
LOG ON
(
    NAME = TestDB_log,
    FILENAME = 'D"\TestDB_log.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB
)
GO

-- 现在,让我们分离该数据库,并尝试使用sp_detach_db和sp_attach_db将它重新附加。
-- 执行下面的事务SQL语句。

use master
go
sp_detach_db 'TestDB'
go
sp_attach_db 'TestDB', 'D:\TestDB.mdf', 'D:\TestDB_log.ldf'
go

-- 你也可以使用具有"For Attach"从句的"Create database"命令附加相同的数据库文件,如下所示。

use master
go
sp_detach_db 'TestDB'
go

CREATE DATABASE TestDB
ON
(FILENAME = 'D:\TestDB.mdf'),
(FILENAME = 'D:\TestDB_log.ldf')
For Attach
go

-- 现在,让我们分离数据库TestDB,然后删除.ldf文件,再然后使用sp_attach_single_file_db
-- 系统存储过程通过,执行下面的T-SQL命令将它重新附加上。

use master
go
sp_detach_db 'TestDB'
go
exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'
go

-- 你可以使用下面的事务SQL语句来激活xp_cmdshell

use master
go
sp_configure 'show advanced options',1
go
reconfigure with override
go
sp_configure 'xp_cmdshell',1
go
reconfigure with override
go

-- 或者,你可以在MS-DOS命令提示符中使用Windows资源管理器的"Del"命令来删除.ldf文件。
-- 现在,让我们只使用sp_attach_single_file_db来附加.MDF文件。执行下面所示的命令。

use master
go
sp_attach_single_file_db 'TestDB','D:\TestDB.mdf'
go

-- 你可以只通过使用带有"For ATTACH_REBUILD_LOG"从句的"Create database"命令来附加
-- 相同的数据库.MDF文件,如下所示。

use master
go
sp_detach_db 'TestDB'
go
exec master..xp_cmdshell 'del "D:\TestDB_log.ldf"'
go

-- 注意:当日志文件被重新创建时,SQL Server自动对日志文件名称添加后缀"_log"。

CREATE DATABASE TestDB
ON
(
    FILENAME = 'D:\TestDB.mdf'
)
For ATTACH_REBUILD_LOG

 编写翻译安装完后日常安全操作:

 1、删除不必要的客商和库:

图片 3

#查看用户和主机列,从mysql.user里查看
select user,host from mysql.user;

#删除用户名为空的库,并检查
delete from mysql.user where user='';
select user,host from mysql.user;

#删除主机名为localhost.localdomain的库,并检查
delete from mysql.user where host='localhost.localdomain';
select user,host from mysql.user;

#删除主机名为::1的库,并检查。::1库的作用为IPV6
delete from mysql.user where host='::1';

#删除test库
drop database test;

图片 4

2、加多额外助理馆员:

图片 5

# 添加额外管理员,system作为管理员,oldsuo为密码
mysql> delete from mysql.user;
Query OK, 2 rows affected (0.00 sec)
mysql> grant all privileges on *.* to system@'localhost' identified by 'oldsuo' with grant option;
Query OK, 0 rows affected (0.00 sec)
# 刷新MySQL的系统权限相关表,使配置生效
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+--------+-----------+
| user   | host      |
+--------+-----------+
| system | localhost |
+--------+-----------+
1 row in set (0.00 sec)
mysql>

图片 6

3、设置签到密码并开机自启:

图片 7

#设置密码,并登陆
/usr/local/mysql/bin/mysqladmin -u root password 'oldsuo'
mysql -usystem -p

#开机启动mysqld,并检查
chkconfig mysqld on
chkconfig --list mysqld

图片 8

 

图片 9 mysql5.1.62安装编写翻译

 

 

四、参考

东升哥

 三、字符集

 对于生手来讲,字符集乱码难点没有什么可争辨的是讨厌的标题,我就带您不在头痛,今后幸福。

    The day before yesterday,there’s a
motif about the lock procedure when backing up MySQL using mysqldump or
Xtrabackup in “Ask Ye” which is like a kind of Q&A originated by Mr.
Ye.In my essay today,I’m gonna use
the tool mysqlsump to do some tests then observe procedures of backing
up MySQL database,here we go.

1、字符集简要介绍:

字符集,character
set,正是大器晚成套表示字符的标志和这一个的标志的平底编码;而校验法规,则是在字符集内用于比较字符的生机勃勃套法则。一句话来讲,字符集就是生龙活虎套文字标识及其编码、相比较规则的集合,第三个计算机字符集ASC2,MySQL数据库字符集包罗字符集和核查准绳五个概念,字符集是概念数据Curry面包车型客车开始和结果字符串的存储方式,而核查准绳是概念相比较字符串的主意。

提出:中德语情形采取utf8

 

2、查看设置字符集

图片 10

# 查看MySQL字符集设置情况
show variables like 'character_set%';
# 查看库的字符集
show create database db;
# 查看表的字符集
show create table db_tb\G
# 查询所有
show collation;

# 设置表的字符集
set tables utf8;

图片 11

图片 12 View Code

Introduction

3、MySQL数据乱码及化解方法

图片 13

1>    系统方面
cat /etc/sysconfig/i18n 
LANG="zh_CN.UTF-8"

2>    客户端(程序),调整字符集为latin1。
mysql> set names latin1;        #临时生效
Query OK, 0 rows affected (0.00 sec)
    #更改my.cnf客户端模块的参数,实现set name latin1 的效果,并且永久生效。
    [client]
default-character-set=latin1
#无需重启服务,退出登录就生效,相当于set name latin1。

3>    服务端,更改my.cnf参数
[mysqld]
default-character-set=latin1        #适合5.1及以前版本
character-set-server=latin1         #适合5.5

4>    库、表、程序
#建表指定utf8字符集
mysql> create database nick_defailtsss DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

图片 14

 

4、将utf8字符集修改成GBK字符集的实在进程

图片 15

1>    导出表结构
#以utf8格式导出
mysqldump -uroot -p --default-character-set=utf8 -d nick_defailt>alltable.sql
--default-character-set=gbk        #表示已GBK字符集连接 –d 只表示表结构

2>    编辑alltable.sql 将utf8改成gbk。

3>    确保数据库不在更新,导出所有数据
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 nick_defailt>alldata.sql

4>    打开alldata.sql将set name utf8 修改成 set names gbk(或者修改系统的服务端和客户端)

5>    建库
create database oldsuo default charset gbk;

6>    创建表,执行alltable.sql
mysql -uroot -p oldsuo <alltable.sql

7>    导入数据
mysql -uroot -p oldsuo <alltable.sql

图片 16

 

    mysqldump is a protogenic logical
backup tool of MySQL.As soon as you’ve installed MySQL server,it can be
used in command line directly.

 四、存款和储蓄引擎

MySQL最常用存款和储蓄引擎Myisam和Innodb。mysql 5.5.5后头私下认可存款和储蓄引擎为Innodb。

MySQL的每一种引擎在MySQL里是通过插件的主意使用的,MySQL能够支撑三种囤积引擎。

建议:使用 Innodb引擎,因为扶持回滚,后续博客会讲。

    mysqldump logically dumps data in the
target database then gernerate a sql file which can be used to restore
the the very database later.it’s rather convenient to backup a single or
multiple databases online(innodb only) but the side-effect is
that it can hold lock when backing up.

1、引擎对应系统文件

图片 17

1)    MyISAM引擎系统库表对应文件
[root@mysql 3306]# ll /data/3306/data/mysql/
-rw-rw----. 1 mysql mysql  10630 10月 31 16:05 user.frm            #保存表的定义
-rw-rw----. 1 mysql mysql   1140 10月 31 18:40 user.MYD            #数据文件
-rw-rw----. 1 mysql mysql   2048 10月 31 18:40 user.MYI            #索引文件

[root@mysql 3306]# file data/mysql/user.frm 
data/mysql/user.frm: MySQL table definition file Version 9
[root@mysql 3306]# file data/mysql/user.MYD 
data/mysql/user.MYD: DBase 3 data file (167514107 records)
[root@mysql 3306]# file data/mysql/user.MYI
data/mysql/user.MYI: MySQL MISAM compressed data file Version 1

2)    InnoDB引擎

[root@mysql 3306]# ll data/
-rw-rw----. 1 mysql mysql 134217728 10月 31 20:05 ibdata1

图片 18

 

2、改良引擎

创建后引擎的修改
语法:    ALTER TABLE student ENGINE = INNODB;
         ALTER TABLE student ENGINE = MyISAM;

图片 19 改革实例

Procedure

发表评论

电子邮件地址不会被公开。 必填项已用*标注