I am using VS2012 and I have a database created:
(localdb)v11.0 (SQL Server 11.0.2100 - T61Alan)
How can I find out the physical location of this database. How can I back this up? Can I just make a copy of the files, move these to another location and start the database again.
Here is my connection string:
<add name="DB1Context" connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=DB1;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
asked Aug 13, 2013 at 6:46
0
It is quite confusing for people who touch with Entity Framework the first time.
If you use Code First, an mdf file is generated at %USERPROFILE%
(e.g. C:Users<username>
).
If you use Database First, you create a database under SQL Server Object Explorer (not Server Explorer!), an mdf file will be generated at %LOCALAPPDATA%MicrosoftMicrosoft SQL Server Local DBInstancesMSSQLLocalDB
.
Ray
7,7227 gold badges57 silver badges90 bronze badges
answered Jan 17, 2017 at 4:19
code4jcode4j
4,1785 gold badges34 silver badges51 bronze badges
3
Are you saying you can see it listed in SQL Server Management Studio? Right click on DataBase -> Properties -> Files
will tell you where on your hard disk it lives. If you backup the mdf, be sure to back up the ldf too.
Alternatively, you can right click on the DB, and choose Tasks -> Backup
. This will make a a single .bak file for you, and you don’t need to worry about the mdf/ldf.
answered Aug 13, 2013 at 6:50
Paul McLeanPaul McLean
3,4306 gold badges25 silver badges36 bronze badges
1
http://technet.microsoft.com/en-us/library/hh510202.aspx
The system database files for the database are stored in the users’
local AppData path which is normally hidden. For example
C:Users–user–AppDataLocalMicrosoftMicrosoft SQL Server Local
DBInstancesLocalDBApp1. User database files are stored where the
user designates, typically somewhere in the C:Users\Documents
folder.
answered Aug 13, 2013 at 6:57
JonathanJonathan
5,9531 gold badge26 silver badges35 bronze badges
1
Try this one –
DECLARE
@SQL NVARCHAR(1000)
, @DB_NAME NVARCHAR(100) = 'AdventureWorks2008R2'
SELECT TOP 1 @SQL = '
BACKUP DATABASE [' + @DB_NAME + ']
TO DISK = ''' + REPLACE(mf.physical_name, '.mdf', '.bak') + ''''
FROM sys.master_files mf
WHERE mf.[type] = 0
AND mf.database_id = DB_ID(@DB_NAME)
PRINT @SQL
EXEC sys.sp_executesql @SQL
Output –
BACKUP DATABASE [AdventureWorks2008R2]
TO DISK = 'D:DATABASESQL2012AdventureWorks2008R2.bak'
answered Aug 13, 2013 at 7:05
DevartDevart
119k23 gold badges163 silver badges185 bronze badges
Open Windows registry editor and navigate to key HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server Local DBInstalled Versions
. Look beneath the version key of the SQL Server instance being targeted e.g. 11.0
for SQL 2012, and see its InstanceAPIPath
value for file system location of the localdb’s.
Note that at full list of SQL server versions mapped to release name and year can be found here
answered Jul 24, 2015 at 21:49
John KJohn K
28.4k31 gold badges139 silver badges228 bronze badges
2
This PowerShell script, will give you the default location for localdb .mdf files:
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null
(New-Object Microsoft.SqlServer.Management.Smo.Server("(localdb)$instancename")).DefaultFile
where $instancename
is the name of the localdb instance you want to check for. You can get a list of localdb instances by running
sqllocaldb i
answered Oct 28, 2015 at 12:19
Jon ListJon List
1,5041 gold badge14 silver badges20 bronze badges
I tried everything here and could not find them anywhere. I finally found them by searching *.mdf in file explorer. They were in C:UsersusersourcereposCallNoteApp_Data
.
answered Jun 10, 2022 at 22:12
cytek04cytek04
3953 silver badges14 bronze badges
Обновлено: 20.07.2020
Опубликовано: 12.07.2018
Тематические термины: MySQL, MariaDB, Linux.
В статье пойдет речь о просмотре и смене пути расположения файлов баз данных MySQL. Приведенные примеры выполнены на CentOS 7 — также они будут работать на Ubuntu и многих других дистрибутивах Linux, FreeBSD и Windows.
Просмотр путей
Командная строка
Оболочка MySQL
phpMyAdmin
Смена расположения баз
Смотрите также
Посмотреть текущий путь
Увидеть, где хранятся базы можно несколькими способами.
Способ 1. Командная строка Linux.
В командной строке вводим:
systemctl status mysql || systemctl status mariadb
* для Windows используем оснастку Службы. Для FreeBSD используем команду service mysql-server stop.
Пример ответа:
mariadb.service – MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Ср 2018-07-11 15:38:16 MSK; 23h ago
Process: 1067 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
Process: 992 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
Main PID: 1066 (mysqld_safe)
CGroup: /system.slice/mariadb.service
??1066 /bin/sh /usr/bin/mysqld_safe –basedir=/usr
??1248 /usr/libexec/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib64/mysql/plugin –log-error=/var/log/mariadb/mariadb.log –pid-file=/var/run/mariadb/mariadb.pid –socket…
* в выделенном фрагменте /var/lib/mysql — путь до файлов базы данных.
Способ 2. Командная оболочка MySQL.
Данный способ является более универсальным — он подойдет для любого дистрибутива Linux, FreeBSD, Windows. Также, метод универсален с точки зрения метода установки MySQL — чистая установка или в составе готовой сборки (Open Server, Xampp, Denwer …).
Заходим под пользователем root в командную оболочку СУБД:
mysql -uroot -p
Вводим:
> SHOW VARIABLES WHERE Variable_Name LIKE “datadir”;
или
> select @@datadir;
Пример ответа:
+—————+—————–+
| Variable_name | Value |
+—————+—————–+
| datadir | /var/lib/mysql/ |
+—————+—————–+
Способ 3. Через phpMyAdmin.
Если у нас нет доступа к серверу по SSH или удаленному рабочему столу, запрос можно сделать в phpMyAdmin:
Смена пути
Останавливаем сервер баз данных:
systemctl stop mysql || systemctl stop mariadb
Создаем новый каталог, например:
mkdir /home/mysql
Переносим содержимое старого каталога в новый:
mv /var/lib/mysql/* /home/mysql/
Задаем права и владельца для нового каталога:
chown mysql:mysql /home/mysql
chmod 755 /home/mysql
Открываем конфигурационный файл my.cnf:
vi /etc/my.cnf.d/server.cnf
* в разных версиях mysql и mariadb могут использоваться разные пути:
- /etc/my.cnf.
- /etc/my.cnf.d/server.cnf.
- /etc/my.cnf.d/mariadb-server.cnf.
- В Windows это my.ini.
и задаем новый путь:
[mysqld]
datadir = /home/mysql
Запускаем сервер:
systemctl start mysql || systemctl start mariadb
Смотрите также
Установка MariaDB на CentOS 7
Как восстановить базу MySQL
Создание и удаление баз в MySQL/MariaDB
Экспорт баз данных MariaDB/MySQL в phpMyAdmin
Была ли полезна вам эта инструкция?
Да Нет
I have done this like this. The sample is for the any database. When you are not sure what the default location is from within the code you can always create a new temporarely database and remove after using this script:
DECLARE @databasetocheck AS nvarchar(128) = 'AnotherTestDb'
SELECT '[' + @@SERVERNAME + ']' AS [Server Name],
[sdb].[name] AS [Database Name],
[saf].[name] AS [Logical File Name],
[saf].[filename] AS [Full path and name],
LEFT([saf].[filename], (LEN([saf].[filename]) - LEN(REVERSE(LEFT(REVERSE([saf].[filename]), CHARINDEX('', REVERSE([saf].[filename])) -1))))) AS [File Location],
LEFT(RIGHT([saf].[filename], (LEN(REVERSE(LEFT(REVERSE([saf].[filename]), CHARINDEX('', REVERSE([saf].[filename])) -1))))), CHARINDEX('.', RIGHT([saf].[filename], (LEN(REVERSE(LEFT(REVERSE([saf].[filename]), CHARINDEX('', REVERSE([saf].[filename])) -1))))))-1)AS [Physical File Name],
RIGHT([saf].[filename], (LEN(REVERSE(LEFT(REVERSE([saf].[filename]), CHARINDEX('.', REVERSE([saf].[filename])) -1))))) AS [File Extension]
FROM [master].[dbo].[sysaltfiles] [saf], [master].[dbo].[sysdatabases] [sdb]
WHERE [saf].[dbid] = [sdb].[dbid]
AND [sdb].[name] = @databasetocheck
GO
Or:
-- Find *.MDF and *.LDF database files and corresponding locations for a all databases
SELECT '[' + @@SERVERNAME + ']' AS [Server Name],
[sdb].[name] AS [Database Name],
[saf].[name] AS [Logical File Name],
[saf].[filename] AS [Full path and name],
LEFT([saf].[filename], (LEN([saf].[filename]) - LEN(REVERSE(LEFT(REVERSE([saf].[filename]), CHARINDEX('', REVERSE([saf].[filename])) -1))))) AS [File Location],
LEFT(RIGHT([saf].[filename], (LEN(REVERSE(LEFT(REVERSE([saf].[filename]), CHARINDEX('', REVERSE([saf].[filename])) -1))))), CHARINDEX('.', RIGHT([saf].[filename], (LEN(REVERSE(LEFT(REVERSE([saf].[filename]), CHARINDEX('', REVERSE([saf].[filename])) -1))))))-1)AS [Physical File Name],
RIGHT([saf].[filename], (LEN(REVERSE(LEFT(REVERSE([saf].[filename]), CHARINDEX('.', REVERSE([saf].[filename])) -1))))) AS [File Extension]
FROM [master].[dbo].[sysaltfiles] [saf], [master].[dbo].[sysdatabases] [sdb]
WHERE ([saf].[fileid] = 1 OR [saf].[fileid] = 2)
AND [saf].[dbid] = [sdb].[dbid]
GO
Good luck!
От автора: а что это вы под ногами ищете? Базу данных? Поверьте, скорее все, она никуда не делась, и лежит «целехонькая» на вашем ПК или сервере! Там уже смотрели? Наверное, вы просто не знаете, где хранятся данные MySQL. Об этом мы вам сегодня и расскажем.
Импорт-экспорт данных в MySQL
Чаще всего найти утерянные базы данных нужно для импорта или копирования. К счастью, для этого не обязательно знать место их «дислокации» на дисковом пространстве. Программные интерфейсы для работы с СУБД MySQL имеют встроенные средства переноса и создания копий БД и таблиц.
В наших «широтах» самой востребованной остается оболочка phpMyAdmin, предназначенная для администрирования системы управления БД MySQL. На примере этого веб-приложения мы и рассмотрим встроенные средства, которые позволят нам остаться в неведении, где находится MySQL.
В phpMyAdmin создание копий баз данных происходит через вкладку «Экспорт». Для дублирования БД или таблицы слева в списке выберете нужный для копирования элемент. После этого перейдите в раздел «Экспорт». В окне параметров в подразделе «Способ экспорта» должно быть установлено значение «Обычный». Затем в списке выделите базу данных (таблицу). После чего нажимаете в самом низу окна «Ок».
В результате программа создаст копию и сохранит ее на клиентской стороне. Вся работа с веб-приложением происходит через браузер, поэтому созданный дубликат БД нужно искать в папке загрузок.
Место хранения оригиналов баз
Знание встроенного функционала phpMyAdmin поможет быстро создать копии нужных данных. Но если на компьютере не установлена ни одна из программных оболочек для администрирования СУБД. А вам нужно перенести БД на другой сервер. Или изменить хранящуюся в таблицах информацию. При этом выполнять запросы придется через консоль, где обязательно прописывается путь к БД. Как видите знать, где хранится база данных MySQL, важно и нужно.
Вот еще один пример «из жизни начинающего админа». Предположим, первоначально вы пользовались Denwer. Но в один «непогожий» день вы нечаянно удалили часть файлов локального сервера. В результате чего он больше не запускается, и вы начинаете «рыть» оставшиеся папки в надежде спасти хотя бы базы данных. Но в этом случает также «удобнее» знать, где копать. Вот пример пути, где в веб-сервере хранятся БД: F:Webserverusrlocalmysql-5.5data, где F – это диск, на котором был установлен Denwer.
Для открытия файлов скопированных БД потребуется phpMyAdmin. Если вы установили сервер СУБД без оболочки, тогда по умолчанию место, где хранятся базы данных MySQL, находится здесь: C:Documents and SettingsAll UsersApplication DataMySQLMySQL Server 5.1data
Файл my.ini
Все описанные методы связаны с осуществлением поиска (в зависимости от варианта использования СУБД) той или иной папки, в которой программы (или сервер) сохраняют созданные базы. Но неужели пользователь никак не может повлиять на это, и самостоятельно указать место на дисковом пространстве MySQL, где хранятся все БД.
Такой вариант настройки был предусмотрен создателями этой системы управления. Все основные параметры задаются в файле my.ini. Он расположен в той же директории, куда установлена и система СУБД.
Данный тип файлов относится к конфигурационным, и открывается с помощью обычного «Блокнота». Чтобы задать «свое» место для всех созданным БД, откройте файл my.ini. Затем найдите в нем раздел [mysqld], и в параметре datadir пропишите путь к нужной папке. После сохранения внесенных изменений (Файл> Сохранить) все существующие базы будут перенесены в указанное вами место файловой системы компьютера или сервера.
Средства SQL
Все описанные выше варианты узнать в MySQL, где лежит БД, являются второстепенными. Потому что СУБД не понимает человеческой речи и письменности. Для общения с ней существует специальный язык SQL. Аббревиатура переводится как язык структурированных запросов (structured query language). То есть с помощью операторов и команд этого языка можно влиять на структуру содержащейся в источнике информации: делать выборки, обновлять данные, вставлять или удалять.
Но не будем слишком забираться в «дремучий лес» профессиональных знаний, нас интересует единственная команда SHOW. Точнее, один из ее вариантов SHOW VARIABLES. Эта команда SQL используется в администрировании для получения служебной информации о конкретном сервере или базе.
SHOW VARIABLES выводит список переменных и их значений из INFORMATION_SCHEMA, которая представляет собой «служебную» БД, в которой содержится информация обо всех базах, подключенных к серверу. Пример запроса: SHOW VARIABLES;
Но из всего этого списка нас интересует лишь одна переменная, с помощью которой можно «узнать» у сервера MySQL, где хранится база. Это переменная basedir, в значение которой записан путь к основной директории. Пример запроса: SHOW VARIABLES LIKE ‘basedir’;
А сейчас прекращайте понапрасну «рыться» в файловой системе своего ПК. Теперь вы точно знаете, как правильно «спросить» у СУБД MySQL, где хранятся базы. Надеемся, нам удалось научить вас этому!
это зависит от того, путь по умолчанию для файлов данных и журналов, или нет.
если путь задан явно в
Properties
=>Database Settings
=>Database default locations
затем SQL server сохраняет его вSoftwareMicrosoftMSSQLServerMSSQLServer
наDefaultData
иDefaultLog
значения.однако, если эти параметры не заданы явно, SQL server использует пути данных и журналов базы данных master.
Ниже приведен сценарий, который охватывает оба случая. Это упрощенная версия запроса, который SQL Management Studio работает.
кроме того, обратите внимание, что я использую
xp_instance_regread
вместоxp_regread
, так что этот скрипт будет работать для любого экземпляра, по умолчанию или именованным.declare @DefaultData nvarchar(512) exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SoftwareMicrosoftMSSQLServerMSSQLServer', N'DefaultData', @DefaultData output declare @DefaultLog nvarchar(512) exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SoftwareMicrosoftMSSQLServerMSSQLServer', N'DefaultLog', @DefaultLog output declare @DefaultBackup nvarchar(512) exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SoftwareMicrosoftMSSQLServerMSSQLServer', N'BackupDirectory', @DefaultBackup output declare @MasterData nvarchar(512) exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SoftwareMicrosoftMSSQLServerMSSQLServerParameters', N'SqlArg0', @MasterData output select @MasterData=substring(@MasterData, 3, 255) select @MasterData=substring(@MasterData, 1, len(@MasterData) - charindex('', reverse(@MasterData))) declare @MasterLog nvarchar(512) exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SoftwareMicrosoftMSSQLServerMSSQLServerParameters', N'SqlArg2', @MasterLog output select @MasterLog=substring(@MasterLog, 3, 255) select @MasterLog=substring(@MasterLog, 1, len(@MasterLog) - charindex('', reverse(@MasterLog))) select isnull(@DefaultData, @MasterData) DefaultData, isnull(@DefaultLog, @MasterLog) DefaultLog, isnull(@DefaultBackup, @MasterLog) DefaultBackup
вы можете достичь того же результата с помощью SMO. Ниже приведен пример C#, но вы можете использовать любой другой язык .NET или PowerShell.
using (var connection = new SqlConnection("Data Source=.;Integrated Security=SSPI")) { var serverConnection = new ServerConnection(connection); var server = new Server(serverConnection); var defaultDataPath = string.IsNullOrEmpty(server.Settings.DefaultFile) ? server.MasterDBPath : server.Settings.DefaultFile; var defaultLogPath = string.IsNullOrEmpty(server.Settings.DefaultLog) ? server.MasterDBLogPath : server.Settings.DefaultLog; }
это намного проще в SQL Server 2012 и выше, предполагая, что у вас есть пути по умолчанию (что, вероятно, всегда правильно):
select InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'), InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')